Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
56
Task/N-queens-problem/Modula-2/n-queens-problem.mod2
Normal file
56
Task/N-queens-problem/Modula-2/n-queens-problem.mod2
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
MODULE NQueens;
|
||||
FROM InOut IMPORT Write, WriteCard, WriteString, WriteLn;
|
||||
|
||||
CONST N = 8;
|
||||
VAR hist: ARRAY [0..N-1] OF CARDINAL;
|
||||
count: CARDINAL;
|
||||
|
||||
PROCEDURE Solve(n, col: CARDINAL);
|
||||
VAR i, j: CARDINAL;
|
||||
|
||||
PROCEDURE Attack(i, j: CARDINAL): BOOLEAN;
|
||||
VAR diff: CARDINAL;
|
||||
BEGIN
|
||||
IF hist[j] = i THEN RETURN TRUE;
|
||||
ELSE
|
||||
IF hist[j] < i THEN diff := i - hist[j];
|
||||
ELSE diff := hist[j] - i;
|
||||
END;
|
||||
RETURN diff = col-j;
|
||||
END;
|
||||
END Attack;
|
||||
BEGIN
|
||||
IF col = n THEN
|
||||
INC(count);
|
||||
WriteLn;
|
||||
WriteString("No. ");
|
||||
WriteCard(count, 0);
|
||||
WriteLn;
|
||||
WriteString("---------------");
|
||||
WriteLn;
|
||||
|
||||
FOR i := 0 TO n-1 DO
|
||||
FOR j := 0 TO n-1 DO
|
||||
IF j = hist[i] THEN Write('Q');
|
||||
ELSIF (i + j) MOD 2 = 1 THEN Write(' ');
|
||||
ELSE Write('.');
|
||||
END;
|
||||
END;
|
||||
WriteLn;
|
||||
END;
|
||||
ELSE
|
||||
FOR i := 0 TO n-1 DO
|
||||
j := 0;
|
||||
WHILE (j < col) AND (NOT Attack(i,j)) DO INC(j); END;
|
||||
IF j >= col THEN
|
||||
hist[col] := i;
|
||||
Solve(n, col+1);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
END Solve;
|
||||
|
||||
BEGIN
|
||||
count := 0;
|
||||
Solve(N, 0);
|
||||
END NQueens.
|
||||
Loading…
Add table
Add a link
Reference in a new issue