八皇后问题如何判断在同一条对角线呢pascal
展开全部
3L正解,但可以说的详细点,开一个数组,一个皇后占得的斜线可以用它的x1,y1坐标表示,如2,1位置的皇后,除了占横竖的以外,还有斜的f3【3】和f4【1】,判断时几个数组一起判,与横竖的占位是一样的,注意要开大一点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面是我程序中的一个函数:
function try(i:integer):boolean; {判断第i个皇后当前位置是否可放置}
var j:integer;
begin
try:=true; {true表示该处可放置}
for j:=1 to i-1 do
if (a[j]=a[i]) or (i-j=abs(a[i]-a[j])) then try:=false;
{第一个条件是同列(由于是深搜,不需要判断同行),第二个条件是同对角线}
end;
function try(i:integer):boolean; {判断第i个皇后当前位置是否可放置}
var j:integer;
begin
try:=true; {true表示该处可放置}
for j:=1 to i-1 do
if (a[j]=a[i]) or (i-j=abs(a[i]-a[j])) then try:=false;
{第一个条件是同列(由于是深搜,不需要判断同行),第二个条件是同对角线}
end;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的是‘N皇后问题’吧。。。
如果是。。。我就继续。。。
算了,我猜应该是。。。。
皇后a[i,j] 皇后b[m,n]
if abs(i-m)=abs(j-n) then
在统一对角线上
如果是。。。我就继续。。。
算了,我猜应该是。。。。
皇后a[i,j] 皇后b[m,n]
if abs(i-m)=abs(j-n) then
在统一对角线上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
program eightquccns;
var
x:array[1..8] of integer;
a,b,c:array[-7..16] of boolean;
i,c:integer;
procedure print;
var
i:integer;
begin
for i:=1 to 8 do
write(x[i]:2);
inc(c);
writeln('count=',c);
end;
procedure try(i:integer);
var
j:integer;
begin
for i:=1 to 8 do
begin
if a[j] and c[i-j] and b[i+j] then
begin
x[i]:=j;
a[j]:=false;
b[i+j]:=false;
c[i-j]:=false;
if i<8 then try(i+1) else print;
a[j]:=true;c[i-j]:=true;b[i+j]:=true;
end;end;end;
begin
for i:=1 to 8 do
a[i]:=true;
for i:=-7 to 7 do
c[i]:=true;
for i:=2 to 16 do
b[i]:=true;
c:=0;
try(1);end.
var
x:array[1..8] of integer;
a,b,c:array[-7..16] of boolean;
i,c:integer;
procedure print;
var
i:integer;
begin
for i:=1 to 8 do
write(x[i]:2);
inc(c);
writeln('count=',c);
end;
procedure try(i:integer);
var
j:integer;
begin
for i:=1 to 8 do
begin
if a[j] and c[i-j] and b[i+j] then
begin
x[i]:=j;
a[j]:=false;
b[i+j]:=false;
c[i-j]:=false;
if i<8 then try(i+1) else print;
a[j]:=true;c[i-j]:=true;b[i+j]:=true;
end;end;end;
begin
for i:=1 to 8 do
a[i]:=true;
for i:=-7 to 7 do
c[i]:=true;
for i:=2 to 16 do
b[i]:=true;
c:=0;
try(1);end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询