永发信息网

在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一

答案:1  悬赏:80  手机版
解决时间 2021-03-16 06:30
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一
最佳答案
pascal  n皇后程序,供参考。


{n皇后问题,递归解法,优化解法}
const n=10;      {n为皇后个数,在程序中为常数,编译前请调整}
var
b:array[1..n,1..n] of boolean;
i,j:integer;
sum:longint;

procedure next(m:integer);  {m表示列,从第一列开始找,直到第n列}
label 999;
var
i:integer;
p,q:integer;    {循环变量,分别标识行、列}
find:boolean;
begin           {i表示棋盘的行}
if m<=n then
for i:=1 to n do begin
{b[i,m]--以此为基点计算}
find:=false;
for q:=1 to m-1 do if b[i,q] then begin find:=true; goto 999; end;  {检查行}
p:=i; q:=m;
while (p-1>=1)and(q-1>=1) do begin    {检查左上方}
dec(p); 
dec(q); 
if b[p,q] then begin find:=true; goto 999; end;
end;  
  p:=i; q:=m;
while (p+1<=n)and(q-1>=1) do begin      {检查左下方} 
inc(p); 
dec(q); 
if b[p,q] then begin find:=true; goto 999; end;
end;  
if not find then begin 
b[i,m]:=true; 
next(m+1);    {递归} 
b[i,m]:=false;   {回溯} 
end;
999:
end;
if m>n then begin
for p:=1 to n do begin
for q:=1 to n do if b[p,q] then write(q:3);
end;
writeln;
inc(sum);
end
end;

begin
for i:=1 to n do for j:=1 to n do b[i,j]:=false;
sum:=0;
next(1);
if sum>0 then writeln('sum=',sum) else writeln('no solute');
end.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
准备买辆SUV,问问看看七座锐界怎么样?
酷乐潮玩创意生活杂货地址有知道的么?有点事
西湾露天煤矿井田多大
有人用过膜西密语的护肤品的?感觉咋样?我想
中国移动通信辛沙路营业厅地址有知道的么?有
求推荐一些初音未来或V家的歌。
th boy told me about uncertain future at b
杰驰汽车轮胎服务中心地址在什么地方,想过去
最近入手索尼tablet p 没电了充电 插个充电器
过敏留下红印的怎样能去除掉
高密度聚乙烯是什么?
杨园街二桥社区地址有知道的么?有点事想过去
我为啥DNF竞拍的东西老是竞拍不到
溺水死亡会游泳跟不会游泳的比例是多少?
为什么我们都看不到自己的档案?而有些人却有
推荐资讯
御金城足道这个地址在什么地方,我要处理点事
2015年3月份买的奔驰C180L中控蛐蛐叫+电流声
英雄联盟新客户端不小心调成英文了怎么办,怎
电线穿管什么牌子好
国家挖煤气管道占用农民土地一平方米补贴多少
发现我家走丢2个月的猫!唤它就停在那看我,
天津市南开区水上小学用哪版小学英语教材?
武汉市汉南区青少年宫在什么地方啊,我要过去
怎么才能借戒掉11选5
景区非工作员私拉游客乱收费违反什么法律规定
我这样金和银可以一起戴嘛?
西安哪有好的酒吧 到了晚上比较high的那种
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?