home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
insidetp
/
1990_04
/
queen1.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-03-19
|
2KB
|
93 lines
{************************************************
* QUEEN1 - the first attempt at solving the *
* queens problem. *
* *
* INP: c - the column # to place a queen in *
* n - the maximum column (& row) number *
* USES: Soln - updates this solution counter *
* whenever a queen is successfully placed *
* in the n'th column. *
************************************************}
UNIT Queen1;
INTERFACE
CONST
MaxBrd = 25;
VAR
{Chess brd}
Board : ARRAY[0..MaxBrd+1,0..MaxBrd+1] OF Byte;
Solns : Integer;
PROCEDURE InitBoard;
PROCEDURE Queens(C,N: Integer);
IMPLEMENTATION
PROCEDURE InitBoard;
BEGIN
FillChar(Board,SizeOf(Board),#0);
Solns := 0
END;
PROCEDURE Queens;
VAR
I,J : Integer;
Legal : Boolean;
BEGIN
{Have we found a solution?}
IF C=N THEN
Inc(Solns)
ELSE
{Check each spot in the column}
BEGIN
FOR I:= 0 TO N-1 DO
BEGIN
Legal := TRUE; {Legal until disproven}
FOR J := 1 TO C DO
BEGIN
{-- Check row --}
IF (Board[I,C-J] <> 0) THEN
Legal := FALSE;
{-- Check diagonal 1 --}
IF ((I+J) < N) THEN
IF (Board[I+J,C-J] <> 0) THEN
Legal := FALSE;
{-- Check diagonal 2 --}
IF ((I-J) >= 0) THEN
IF (Board[I-J,C-J] <> 0) THEN
Legal := FALSE;
END;
IF (Legal) THEN
BEGIN
Board[I,C] := 1; {Put queen here}
Queens(C+1,N); {Process next col}
Board[I,C] := 0 {Remove & try next}
END;
END;
END;
END;
END.