|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3840 (0xf00)
Types: TextFile
Names: »mpasc4«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦this⟧ »mpasc4«
(* 18.12.81 (. CHANGED TO Æ
.) CHANGED TO Å
() CHANGED TO blanks
1..MAXSIZE CHANGED TO INTEGER
the hco pascal-compiler detects index-errors which
are not detected by the motorola pascal-compiler.
*)
PROGRAM QUEENS(INPUT,OUTPUT);
CONST MAXSIZE = 15;
VAR
N, (*BOARD SIZE*)
CURCOLNBR, (*CURRENT COLUMN INDEX*)
I, J, (*LOOP VARIABLES *)
DIAGNBR (*DIAGONAL NUMBER *) : INTEGER;
PLACEDAQUEEN : BOOLEAN;
COL (*COLS. OF BOARD *) : ARRAY Æ1 .. MAXSIZEÅ OF INTEGER;
BEGIN
WRITELN('This program will determine all the ways to arrange');
WRITELN('N queens on a N by N chessboard so that no queen');
WRITELN('can be taken by any other queen.');
WRITELN(' ');
WRITELN('PLEASE ENTER THE VALUE OF N. (8 GIVES THE SOLUTION FOR CHESS)');
READLN(N);
IF (N <= 0) OR (N > MAXSIZE)
THEN WRITELN('INVALID BOARD SIZE')
ELSE
BEGIN
(*GENERATE AND PRINT SOLUTIONS*)
FOR CURCOLNBR := 1 TO N DO
COLÆCURCOLNBRÅ := 0;
CURCOLNBR := 1;
WHILE CURCOLNBR > 0 DO
BEGIN (*PLACE A QUEEN OR BACKTRACK*)
PLACEDAQUEEN := FALSE;
I := COLÆCURCOLNBRÅ + 1;
WHILE (I <= N) AND (NOT PLACEDAQUEEN) DO
BEGIN
(*COMPUTE PLACEDAQUEEN-TRUE IF PIECE AT (CURCOLNBR, I)
IS ALL RIGHT *)
PLACEDAQUEEN := TRUE;
J := 1;
WHILE PLACEDAQUEEN AND (J < CURCOLNBR) DO
BEGIN
PLACEDAQUEEN := COLÆJÅ<>I;
J := J + 1
END;
IF PLACEDAQUEEN THEN (*ROW IS OK*)
BEGIN (*CHECK UPWARD DIAGONAL*)
DIAGNBR := I + CURCOLNBR;
J := 1;
WHILE PLACEDAQUEEN AND (J < CURCOLNBR) DO
BEGIN
PLACEDAQUEEN := (COLÆJÅ + J) <> DIAGNBR;
J := J + 1
END (*WHILE*)
END;(*THEN*)
IF PLACEDAQUEEN THEN (*UPWARD DIAGONAL IS OK*)
BEGIN (*CHECK DOWNWARD DIAGONAL*)
DIAGNBR := I - CURCOLNBR;
J := 1;
WHILE PLACEDAQUEEN AND (J < CURCOLNBR) DO
BEGIN
PLACEDAQUEEN := (COLÆJÅ - J) <> DIAGNBR;
J := J + 1
END (*WHILE*)
END; (*THEN*)
(*PIECE AT I IS NOW KNOWN TO BE VALID OR NOT*)
IF NOT PLACEDAQUEEN
THEN I := I + 1
ELSE COLÆCURCOLNBRÅ := I
END;
IF NOT PLACEDAQUEEN (*COLUMN IS EXHAUSTED SO BACKTRACK*)
THEN
BEGIN
COLÆCURCOLNBRÅ := 0;
CURCOLNBR := CURCOLNBR - 1
END
ELSE
IF CURCOLNBR = N
THEN (*WE HAVE A SOLUTION*)
BEGIN (*OUTPUT THE SOLUTION*)
WRITE (' SOLUTION :');
FOR I := 1 TO N DO
WRITE (COLÆIÅ:4);
WRITELN
END
ELSE CURCOLNBR := CURCOLNBR + 1
END; (*OF PLACE A QUEEN LOOP*)
WRITELN(' SEARCH COMPLETE')
END
END.
▶EOF◀