DECLARE SUB RecDama (n%, d() AS ANY) DECLARE SUB ExibeTab (d() AS ANY) DECLARE FUNCTION Ataca% (a%, b%, d() AS ANY) DEFINT A-Z TYPE Xadrez Lin AS INTEGER Col AS INTEGER END TYPE CLS CONST Max = 4 DIM Dama(1 TO Max) AS Xadrez RecDama 1, Dama() SYSTEM FUNCTION Ataca (a, b, d() AS Xadrez) IF d(a).Lin = d(b).Lin OR d(a).Col = d(b).Col THEN Ataca = -1: EXIT FUNCTION IF ABS(d(a).Lin - d(b).Lin) = ABS(d(a).Col - d(b).Col) THEN Ataca = -1 END FUNCTION SUB ExibeTab (d() AS Xadrez) STATIC Tot Tot = Tot + 1 PRINT Tot FOR i = 1 TO Max FOR j = 1 TO Max FOR k = 1 TO Max IF d(k).Lin = i AND d(k).Col = j THEN PRINT "D"; : EXIT FOR NEXT IF k > Max THEN PRINT "#"; NEXT PRINT NEXT PRINT a$ = INPUT$(1) END SUB SUB RecDama (n, d() AS Xadrez) FOR i = 1 TO Max d(n).Lin = n: d(n).Col = i atc = 0: j = 1 WHILE (j < n AND NOT atc) atc = Ataca(n, j, d()) j = j + 1 WEND IF NOT atc THEN IF n = Max THEN ExibeTab d() ELSE RecDama n + 1, d() END IF NEXT END SUB