pascal 编程题 n皇后问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 02:21:16
在N*N的棋盘上放置N个皇后而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有不同的摆放方法数目。
输入:
4
输出
2 4 1 3
2 1 4 2

program tt;
var a:array [1..100] of integer;
b,c,d:array [-100..200] of integer;
t,i,j,k:integer;
procedure print;
begin
t:=t+1;
write(t,' ');
for k:=1 to n do write(a[k],' ');
writeln;
end;

procedure try(i:integer);
var j:integer;
begin
for j:=1 to n do {每个皇后都有n种可能位置}
if (b[j]=0) and (c[i+j]=0) and (d[i-j]=0) then {判断位置是否冲突}
begin
a[i]:=j; {摆放皇后}
b[j]:=1; {宣布占领第J行}
c[i+j]:=1; {占领两个对角线}
d[i-j]:=1;
if i<n then try(i+1) {n个皇后没有摆完,递归摆放下一皇后}
else print; {完成任务,打印结果}
b[j]:=0; {回溯}
c[i+j]:=0;
d[i-j]:=0;
end;
end;
begin
readln(n);
try(1);{从第1个皇后开始放置}
end.
另附八皇后:
program tt;
var a:array