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
……
展开
 我来答
问题要被解决
2017-05-29 · TA获得超过7744个赞
知道小有建树答主
回答量:79
采纳率:55%
帮助的人:27.7万
展开全部
八皇后是经典的回溯问题,先放代码:
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.
重点是判断横竖斜,祝你成功!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式