八皇后问题

转载自:https://mp.weixin.qq.com/s/Kdvo_yGFaYmw5TjNg6Bb8Q

这是计算机科学中的经典问题。目的是在棋盘上放置八个皇后不会有两个皇后互相攻击。也就是说,在同一行,同一列或同一对角线中,没有两个皇后区。我们通过允许棋盘的任意尺寸N来概括这个原始问题。 

 

我们用数字1..N表示皇后的位置。

例如: [4,2,7,3,6,8,5,1] 表示第一列中的皇后在第4行中,第二列中的皇后在第2行中,依此类推。通过使用数字1..N的置换,我们保证没有两个皇后在同一行中。剩下要做的唯一测试是对角线测试。放置在X列和Y行上的一个女王占据两个对角线:其中一个对角线C = X - Y,从左下角到右上角,另一个对角线D = X + Y,从左上角到右下。在测试谓词中,我们跟踪Cs和Ds中已经占用的对角线。  

程序文件名:p7_01.pl

版本1 是一个简单的生成和测试解。

 

% queens_1(N,Qs) :- Qs是N皇后问题的解

 

queens_1(N,Qs) :- 

range(1,N,Rs), 

permu(Rs,Qs), 

test(Qs).

 

% range(A,B,L) :- L是数字A..B的列表

range(A,A,[A]).

range(A,B,[A|L]) :- 

A < B

A1 is A+1, 

range(A1,B,L

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值