主题:谁能帮我解八皇后问题?有加分
tcdkz
[专家分:210] 发布于 2005-07-14 21:09:00
八皇后问题是一个古老而著名的问题,是回朔算法的典型例题。该问题是19世纪著名的
数学家高斯1850年提出:在8*8的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行,同一列或同一斜线上,问有多少种摆法。
[fly]谁能帮我解八皇后问题?[/fly]
回复列表 (共9个回复)
沙发
cuzn1024 [专家分:4050] 发布于 2005-07-13 16:51:00
许多讲pascal的教程,都有这个题。
板凳
kuuga [专家分:190] 发布于 2005-07-13 19:53:00
用肺说话-说肺(废)话
3 楼
口口and枕头 [专家分:1550] 发布于 2005-07-13 21:36:00
我看到这几个字都看了N回了~
4 楼
zhsas [专家分:1680] 发布于 2005-07-13 22:33:00
一共有92种摆法.
program zhs (input,output);
var
x:array[1..8] of integer;
a,b,c:array[-7..16] of boolean;
i:integer;
procedure print;
{如果加好多分的话,下次就给你这个}
procedure try(i:integer);
{如果加好多分的话,下次就给你这个}
begin
for i:=-7 to 16 do
begin
a[i]:=true;
b[i]:=true;
c[i]:=true
end;
try(1)
end.
5 楼
zhsas [专家分:1680] 发布于 2005-07-14 21:12:00
现在给过程print代码;
procedure print;
var
k:integer;
begin
for k:=1 to 8 do
write(x[k]:4);
writeln
end;
现在给过程try:
program try (i:integer);
var
j:integer;
begin
for j:=1 to 8 do
if a[j] and b[i+j] and c[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;
b[i+j]:=true;
c[i-j]:=true
end
end;
6 楼
口口and枕头 [专家分:1550] 发布于 2005-07-15 16:00:00
楼上的好BT呀`|
7 楼
74zzz [专家分:80] 发布于 2005-07-21 17:58:00
见分眼开 晕```````
8 楼
口口and枕头 [专家分:1550] 发布于 2005-07-23 01:12:00
oh~~~no~~~~
我觉得zhsas的程序有问题~~~
i到了后来好像就是个定值了~~~~
但你还用了一个if还判断i是否小于8;
其实我也没怎么看懂,能解释一下吗?
9 楼
sd5774188 [专家分:260] 发布于 2005-07-25 21:40:00
我编的n皇后(求一组解);
program yb(input,output);
const max=100;
var way:array[1..max,1..max]of boolean;
a,b,c:array[1-max..max+max]of boolean;
s,hmq:integer;
procedure search(n:integer);
procedure print;
var i,j:integer;
begin
for i:=1 to hmq do begin
for j:=1 to hmq do
if way[i,j] then
write('Q',' ')
else
write('.',' ');
writeln;
end;
writeln;
inc(s);
end;
var j:integer;
begin
if n>hmq then print else begin
for j:=1 to hmq do
if (a[j])and(b[n-j])and(c[n+j]) then
if s<>1 then
begin
way[n,j]:=true;
a[j]:=false;
b[n-j]:=false;
c[n+j]:=false;
search(n+1);
a[j]:=true;
b[n-j]:=true;
c[j+n]:=true;
way[n,j]:=false;
end
else exit;
end;
end;
begin
s:=0;
writeln('How many q?');
read(hmq);
fillchar(way,sizeof(way),false);
fillchar(a,sizeof(a),true);
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
search(1);
readln;
end.
我来回复