八皇后问题递归PASCAL代码,有思路,好的话追分

 我来答
scboy1994
2011-05-28 · 超过13用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:40.5万
展开全部
我表示前面那个兄弟的程序复杂了些,稍稍改了一下print,并加了自己的一些理解
VAR
x:ARRAY[1..8]OF integer;
a,b,c:ARRAY[-7..16]OF boolean; {-7,16是观察棋盘得出的边界,看完后面就明白了}
i:integer;
PROCEDURE print;
VAR k:integer;
BEGIN
for k:=1 to 8 do
write(x[k]:4);
writeln;
end;
PROCEDURE try(:integer); {这里是核心了}
VAR j:integer;
BEGIN
FOR j:=1 TO 8 DO {j是棋盘的纵坐标,i是横坐标,画图可以看出只需循环j. }
IF a[j]AND b[i+j]AND c[i-j] {判断该格子是否被占, i+j和i-j都是这一个的斜线方向,自己画图就懂,若被占了直接返回上面的循环..该格子为空则继续下面 }
THEN BEGIN
x[i]:=j; {记录第i个皇后的纵坐标}
a[j]:=false;b[j+i]:=false;c[i-j]:=false; {将该格子占领}
IF i<8 {,i=8时,即排到 第八个皇后的时候,就打印棋盘}
THEN try(i+1) {没到第八个时则继续递归, 求i+1的皇后的位置,如果可以就进行,不行 就回溯}
ELSE print;
a[j]:=true;b[i+j]:=true;c[i-j]:=true;{注意:这是回溯!}
END;
END;
BEGIN
FOR i:=-7 TO 16 DO
BEGIN
a[i]:=true;b[i]:=true;c[i]:=true
END;
try(1)
END.
zyh617517224
2011-05-28 · TA获得超过1549个赞
知道小有建树答主
回答量:654
采纳率:0%
帮助的人:800万
展开全部
PROGRAM e710;
VAR
x:ARRAY[1..8]OF integer;
a,b,c:ARRAY[-7..16]OF boolean; {-7,16是观察棋盘得出的边界,看完后面就明白了}
i,g:integer;
PROCEDURE print(Var g:integer); {打印棋盘}
VAR k,j,h:integer;
BEGIN
IF g MOD 16=0
THEN readln; {每输出16个棋盘暂停一次,方便检查.}
writeln('means',g); {输出有第g种方法.可有可无.}
FOR j:=8 DOWNTO 1 DO
BEGIN
FOR k:=1 TO 16 DO write('_');
writeln;
FOR k:=1 TO 8 DO
IF x[k]=j
THEN BEGIN
FOR h:=1 TO k-1 DO write(' |');
write('Q|'); {Q代表皇后}
FOR h:=k TO 7 DO write(' |')
END;
writeln
END;
inc(g)
END;
PROCEDURE try(i:integer); {这里是核心了}
VAR j:integer;
BEGIN
FOR j:=1 TO 8 DO {j是棋盘的纵坐标,i是横坐标,画图可以看出只需循环j. }
IF a[j]AND b[i+j]AND c[i-j] {判断该格子是否被占, i+j和i-j都是这一个的斜线方向,自己画图就懂,若被占了直接返回上面的循环..该格子为空则继续下面 }
THEN BEGIN
x[i]:=j; {记录第i个皇后的纵坐标}
a[j]:=false;b[j+i]:=false;c[i-j]:=false; {将该格子占领}
IF i<8 {,i=8时,即排到 第八个皇后的时候,就打印棋盘}
THEN try(i+1) {没到第八个时则继续递归, 求i+1的皇后的位置}
ELSE print(g);
a[j]:=true;b[i+j]:=true;c[i-j]:=true
END;
END;
BEGIN
FOR i:=-7 TO 16 DO
BEGIN
a[i]:=true;b[i]:=true;c[i]:=true
END;
g:=1;
try(1)
END.

参考资料: http://zhidao.baidu.com/question/229070573.html?an=0&si=1

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式