主题:求8皇后的1数组解
menza109
[专家分:0] 发布于 2005-04-18 22:27:00
1数组就是说在求解8皇后的过程中,只用1维数组,而且只用1个数组!!求解,解出是高手!!!!!!![em4][em4][em4][em7][em7][em8][em9][em10][em11][em12][em13][em15][em14][em19][em20][em1]
回复列表 (共4个回复)
沙发
jtchang [专家分:5370] 发布于 2005-04-19 01:21:00
好象是标准教科书上的东东啊!教科书就是用一个一维组数组的啊!解出来也不算高手啊!你不会想把循环变量什么的都往数组里塞吧?那就晕倒~~~[em10]
忘了说噢!我不常来,下面2楼我提的N皇后问题,有个程序放在
http://jtchang.51.net/data/qn.zip
里,因为是免费空间所以有时不能下载。如果能下载的话,有兴趣可以看看噢!
板凳
jtchang [专家分:5370] 发布于 2005-04-19 01:36:00
const
N=8;
var
k: integer;
x: array[1..N] of integer;
sum: longint;
procedure PrintChessboard;
var
i,j:integer;
begin
writeln;
writeln('No. ',sum);
for i:=1 to N do
begin
for j:=1 to N do
begin
if j=x[i] then write('Q':2)
else write('.':2);
end;
writeln;
end;
for i:=1 to N do write(x[i]:3);
writeln;
writeln('Press Enter...');
readln;
end;
function place(k: integer): boolean;
var
j:integer;
begin
for j:=1 to k-1 do
if (k-j=abs(x[k]-x[j])) or (x[k]=x[j]) then
begin
place:=false;
exit;
end;
place:=true;
end;
begin
x[1]:=0; k:=1; sum:=0;
while k>0 do
begin
x[k]:=x[k]+1;
while (x[k]<=N) and not place(k) do x[k]:=x[k]+1;
if x[k]<=N then
if k=N then
begin
sum:=sum+1;
PrintChessboard;
end
else
begin
k:=k+1;
x[k]:=0;
end
else k:=k-1;
end;
writeln;
writeln('Sum: ',sum);
end.
告诉你怎样才算高手:
n皇后问题
n行n列的方形棋盘上,放上n个皇后,使得没有任何两个皇后互相攻击。
设: 4<= n <= 100
由键盘输入n的值,要求:
(1) 打印出一种满足条件的摆法。
(只要求打印出1种摆法就算完成任务)
(2) 程序从输入n值起,到找到答案止,运行时间不得超过10秒钟.
(10秒钟算是很客气啦,其实不用一两秒钟就能摆平)
3 楼
小小的草根 [专家分:0] 发布于 2005-04-19 07:34:00
好象在以前的竞赛有这样的题目哦
4 楼
faintzw [专家分:2660] 发布于 2005-04-19 23:00:00
如果只打出一种解,那是太容易的了……10s绝对足够
要打出所有解就必须遍历整个解空间,是不可能很快的
我来回复