大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>Pascal练习>>高斯八皇后         本站全文搜索: 友情提示:

高斯八皇后
http://www.mydrs.org  6/21/2001  大榕树


[问题描述] 八皇后问题:在一个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
共有6348位读者阅读过此文

  • 上篇文章[推荐]LOGO教学要点与练习
  • 下篇文章简单背包问题

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8307]
    2. 七类高中生具有保送资格 [5911]
    3. NOI2006获奖选手名单 [4956]
    4. 关于举办NOIP2006模拟赛的通告 [4107]
    5. Turbo Pascal各语句运行速... [3595]
    6. Turbo王者归来新Delphi免费... [3182]
    7. IOI2006我国4名选手全部获得金... [2946]
    8. 关于APIO2007与IOI2007... [2764]
    9. noip倒计时 by 枯叶蝴蝶 [2684]
    10. 朱泽园:思想上的金牌更重要 [2169]
    八皇后问题程序及注解
    高斯八皇后
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号