求八皇后pascal程序及详细解法,本人较笨,请解释得清晰一点,且本人没学过集合,记录,文件,指针,麻... 20

求八皇后pascal程序及详细解法,本人较笨,请解释得清晰一点,且本人没学过集合,记录,文件,指针,麻烦了...... 求八皇后pascal程序及详细解法,本人较笨,请解释得清晰一点,且本人没学过集合,记录,文件,指针,麻烦了 ... 展开
 我来答
xyyxiao0007
2014-04-11 · 超过22用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:55.1万
展开全部
八皇后主要用DFS来解决,集合、记录、指针等用不到。
程序:
var
x,y,z:array[1..25]of boolean;
i,n,j,t:longint;
function ok(d,i:longint):boolean;
begin
ok:=true;
if (d<i) and not(y[i-d+1])then ok:=false; //判断左斜列
if (d=i) and not(y[1])then ok:=false;
if (d>i) and not(y[d-i+n])then ok:=false;
if (d>n-i+1) and not(z[n+d-(n-i+1)])then ok:=false; //判断右斜列
if (d=n-i+1) and not(z[1])then ok:=false;
if (d<n-i+1) and not(z[n-i+2-d])then ok:=false;
end;
procedure dfs(d:longint);
var
i:longint;
begin
if d=n+1 then
begin
inc(t); //找到就加一
exit;
end;
for i:=1 to n do
if ok(d,i)and (x[i]) then
begin
x[i]:=false;
if d<i then y[i-d+1]:=false; //记录
if d=i then y[1]:=false;
if d>i then y[d-i+n]:=false;
if d>n-i+1 then z[n+d-(n-i+1)]:=false;
if d=n-i+1 then z[1]:=false;
if d<n-i+1 then z[n-i+2-d]:=false;
dfs(d+1);
x[i]:=true; //回溯
if d<i then y[i-d+1]:=true;
if d=i then y[1]:=true;
if d>i then y[d-i+n]:=true;
if d>n-i+1 then z[n+d-(n-i+1)]:=true;
if d=n-i+1 then z[1]:=true;
if d<n-i+1 then z[n-i+2-d]:=true;
end;
end;
begin
fillchar(x,sizeof(x),true);
fillchar(y,sizeof(y),true);
fillchar(z,sizeof(z),true);
read(n);
dfs(1);
writeln(t);
end.
这是n皇后,输入8就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式