四皇后问题(Pascal)
【问题描述】在4×4的棋盘上安置4个皇后,要求任意两个皇后不在同一行,同一列、同一条对角线上,输出所有可能的皇后放置方案。用Pascal解决。急!!!...
【问题描述】
在4×4的棋盘上安置4个皇后,要求任意两个皇后不在同一行,同一列、同一条对角线上,输出所有可能的皇后放置方案。
用Pascal解决。急!!! 展开
在4×4的棋盘上安置4个皇后,要求任意两个皇后不在同一行,同一列、同一条对角线上,输出所有可能的皇后放置方案。
用Pascal解决。急!!! 展开
展开全部
利用回溯算法解决
program Exp1(input,output);
const
n=4; //皇后数
var
ans:longint;
a,b,c:array[-100..100] of boolean;
//a[i]表示第i列是否被占有
//b[i]表示第i条左斜对角线是否被占有
//c[i]表示第i条右斜对角线是否被占有
procedure search(i:longint); //按行搜索摆放第i个皇后
var
j:longint;
begin
if i>n then //摆完了
begin
inc(ans); //计数器加1
exit;
end;
for j:=1 to n do //搜索摆在第几列上
if a[j] and b[i+j] and c[i-j] then
begin
a[j]:=false; //标志为占有
b[i+j]:=false;
c[i-j]:=false;
search(i+1);
a[j]:=true; //回溯
b[i+j]:=true;
c[i-j]:=true;
end;
end;
begin
fillchar(a,sizeof(a),true);
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
ans:=0;
search(1);
writeln(ans);
end.
program Exp1(input,output);
const
n=4; //皇后数
var
ans:longint;
a,b,c:array[-100..100] of boolean;
//a[i]表示第i列是否被占有
//b[i]表示第i条左斜对角线是否被占有
//c[i]表示第i条右斜对角线是否被占有
procedure search(i:longint); //按行搜索摆放第i个皇后
var
j:longint;
begin
if i>n then //摆完了
begin
inc(ans); //计数器加1
exit;
end;
for j:=1 to n do //搜索摆在第几列上
if a[j] and b[i+j] and c[i-j] then
begin
a[j]:=false; //标志为占有
b[i+j]:=false;
c[i-j]:=false;
search(i+1);
a[j]:=true; //回溯
b[i+j]:=true;
c[i-j]:=true;
end;
end;
begin
fillchar(a,sizeof(a),true);
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
ans:=0;
search(1);
writeln(ans);
end.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询