大榕树 \ Pascal语言 \ Pascal练习
高斯八皇后
原文链接:http://www.mydrs.org/program/list.asp?id=57
[问题描述] 八皇后问题:在一个8*8的国际象棋棋盘上放置八个皇后,使他们不互相攻击,求解的数量.
输入:[NONE] 输出:[SCREEN]
SOL01: 1 3....
.....
SOL92 :8 5....
[问题分析] 这是一个经典问题,是一个遍历的典型例子,本站给出一种比较易懂的方法,但效率不是最高.
program queen;const qnum=8;
var board:array[1..qnum] of integer;
m,n:array[2..2*qnum] of boolean;
y:array[1..qnum] of boolean;
count:integer;procedure init;
var j:integer;
begin
count:=0;
for j:=1 to qnum do y[j]:=true;
for j:=2 to 2*qnum do begin m[j]:=true;n[j]:=true; end;
end;procedure print;
var j:integer;
begin
inc(count);
write(count:8);
for j:=1 to qnum do write(board[j]:4);
writeln;
end;procedure try(i:integer);
var j:integer;
begin
for j:=1 to qnum do
if y[j] and m[i+j] and n[i-j+qnum+1] then begin
board[i]:=j;y[j]:=false;m[i+j]:=false;n[i-j+qnum+1]:=false;
if i=qnum then print else try(i+1);
y[j]:=true;m[i+j]:=true;n[i-j+qnum+1]:=true;
end;
end;begin
init;
try(1);
writeln('Program end.');
readln;
end.
作者:MQL
来源:Pascal Zone
时间:2001-06-21上一篇:[推荐]LOGO教学要点与练习
下一篇:简单背包问题
大榕树 版权所有 ©1999-2006