八皇后问题

本文介绍了八皇后问题的计算机科学背景,该问题旨在在8x8棋盘上放置8个皇后,使得它们彼此不攻击。给出了两种Prolog语言的解决方案:版本1和版本2,分别展示了生成和测试解以及将测试器嵌入发生器内部的方法。并提供了SWI-Prolog的测试示例。
摘要由CSDN通过智能技术生成

转载自: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值