8皇后问题pascal
在一个8*8的棋盘上放置8个皇后,且使得每两个之间不能互相攻击,也就是使得每两个不在同一行,同一列和同一斜角线上。以下为8皇后问题的一个解:输入无输出若干行,每行8个数a...
在一个8*8的棋盘上放置8个皇后,且使得每两个之间不能互相攻击,也就是使得每两个不在同一行,同一列和同一斜角线上。以下为8皇后问题的一个解: 输入无 输出 若干行,每行8个数a_i(i:=1..8),表示第i行的皇后放置在第a_i列。一行表示一个解。 样例输入 [复制]样例输出 [复制]1 5 8 6 3 7 2 41 6 8 3 7 4 2 5……
没有输入
输出;
1 5 8 6 3 7 2 4
1 6 8 3 7 4 2 5
…… 展开
没有输入
输出;
1 5 8 6 3 7 2 4
1 6 8 3 7 4 2 5
…… 展开
展开全部
八皇后是经典的回溯问题,先放代码:
program ex1;
var
a:array[1..100]of integer;
b,c,d:array[-100..100]of boolean;
n,i,j,k:integer;
procedure try(k:integer);
var i:integer;
begin
if k>n then begin for j:=1 to n do write(a[j],' ');writeln;end
else begin
for i:=1 to n do
if (b[i])and(c[k+i])and(d[k-i]){找条件}
then begin a[k]:=i;
b[i]:=false;
c[k+i]:=false;
d[k-i]:=false;
try(k+1);
b[i]:=true;
c[k+i]:=true;
d[k-i]:=true;
end;
end;
end;
begin
readln(n);
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
fillchar(d,sizeof(d),true);
try(1);
readln;
end.
重点是判断横竖斜,祝你成功!
program ex1;
var
a:array[1..100]of integer;
b,c,d:array[-100..100]of boolean;
n,i,j,k:integer;
procedure try(k:integer);
var i:integer;
begin
if k>n then begin for j:=1 to n do write(a[j],' ');writeln;end
else begin
for i:=1 to n do
if (b[i])and(c[k+i])and(d[k-i]){找条件}
then begin a[k]:=i;
b[i]:=false;
c[k+i]:=false;
d[k-i]:=false;
try(k+1);
b[i]:=true;
c[k+i]:=true;
d[k-i]:=true;
end;
end;
end;
begin
readln(n);
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
fillchar(d,sizeof(d),true);
try(1);
readln;
end.
重点是判断横竖斜,祝你成功!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询