VAR
CONT,I:INTEGER;
A:ARRAY[1..N] OF BYTE;{存放正确的一组解}
C:ARRAY[1..N] OF BOOLEAN;{存放某一列放皇后的情况,用于判断是否有同列的情况}
L:ARRAY[1-N..N-1] OF BOOLEAN;{存放某一斜线上放皇后的情况,用于判断是否有同斜线的情况;斜线的方向为\}
R:ARRAY[2..2*N] OF BOOLEAN;{存放某一斜线上放皇后的情况,用于判断是否有同斜线的情况;斜线的方向为/}
PROCEDURE PR;
VAR
I:INTEGER;
BEGIN
FOR I:=1 TO N DO WRITE(A[I]:4);
INC(CONT);
WRITELN(' CONT=',CONT);
END;
PROCEDURE TRY(I:INTEGER);
VAR
J:INTEGER;
PROCEDURE ERASE(I:INTEGER);
BEGIN
C[J]:=TRUE;
L[I-J]:=TRUE;
R[I+J]:=TRUE;
END;
BEGIN
FOR J:=1 TO N DO
IF C[J] AND L[I-J] AND R[I+J] THEN
BEGIN
A[I]:=J;
C[J]:=FALSE;
L[I-J]:=FALSE;
R[I+J]:=FALSE;
IF I<N THEN TRY(I+1) ELSE PR;
ERASE(I);
END;
END;
END;
BEGIN
FOR I:=1 TO N DO C[I]:=TRUE;
FOR I:=1-N TO N-1 DO L[I]:=TRUE;
FOR I:=2 TO 2*N DO R[I]:=TRUE;
CONT:=0;
I:=1;
TRY(I);
WRITELN;
WRITELN('PROGRAM END.');
READLN;
END.
PROGRAM HUANGHOU(INPUT,OUTPUT);{回溯算法} CONST N=8;
VAR
K:INTEGER;
X:ARRAY[1..N] OF INTEGER;
FUNCTION PLACE(K:INTEGER):BOOLEAN;
VAR
I:INTEGER;
BEGIN
I:=1;
WHILE I<K DO
BEGIN
IF (ABS(X[I]-X[K])=ABS(I-K)) OR (X[I]=X[K]) THEN BEGIN
PLACE:=FALSE;
EXIT;
END;
I:=I+1;
END;
PLACE:=TRUE;
END;
PROCEDURE PRN;
VAR
I:INTEGER;
BEGIN
FOR I:=1 TO N DO WRITE(X[I]:4);
WRITELN;
END;
PROCEDURE NQUEENS(N:INTEGER);
BEGIN
X[1]:=0;
K:=1;
WHILE K>0 DO
BEGIN
X[K]:=X[K]+1;
WHILE ((X[K]<=N) AND (NOT PLACE(K))) DO X[K]:=X[K]+1;
IF X[K]<=N THEN
BEGIN
IF K=N THEN PRN
ELSE
BEGIN
K:=K+1;
X[K]:=0;
END;
END
ELSE K:=K-1;
END;
END;
BEGIN
NQUEENS(N);
READLN;
END.
PROGRAM BHH(INPUT,OUTPUT);{穷举算法:最好理解,但效率最低} CONST N=8;
VAR
I1,I2,I3,I4,I5,I6,I7,I8:INTEGER;
X:ARRAY [1..N] OF INTEGER;
PROCEDURE PRINT;{输出正确的解}
VAR
I:INTEGER;
BEGIN
WRITELN;
END;
FUNCTION CHECK():BOOLEAN;
VAR
A,B:INTEGER;
BEGIN
FOR A:=2 TO N DO
BEGIN
FOR B:=1 TO A-1 DO
BEGIN
IF (ABS(X[A]-X[B])=ABS(A-B)) OR (X[A]=X[B]) THEN
BEGIN
CHECK:=FALSE;
EXIT;
END;
END;
END;
CHECK:=TRUE;
END;
BEGIN
FOR I1:=1 TO N DO
FOR I2:=1 TO N DO
FOR I3:=1 TO N DO
FOR I4:=1 TO N DO
FOR I5:=1 TO N DO
FOR I6:=1 TO N DO
FOR I7:=1 TO N DO
BEGIN
X[1]:=I1;
X[2]:=I2;
X[3]:=I3;
X[4]:=I4;
X[5]:=I5;
X[6]:=I6;
X[7]:=I7;
X[8]:=I8;
IF CHECK() THEN PRINT;
END;
READLN;
END.
算法处理录入:admin责任编辑:admin ∙上一篇算法处理:杨辉三角
∙下一篇算法处理:OI之动态规划
【字体:小大】【发表评论】【告诉好友】【打印此文】【关闭窗口】。