python使用回溯算法求解N皇后问题

19世纪著名的数学家高斯于1895年提出该N皇后的问题,主要是在nxn的国际象棋棋盘上摆放n个皇后棋子,皇后棋子之间不能互相攻击,即其中任意两个皇后都不能处于同一行、同一列或同一斜线上。要给定n然后给出所有的放置方式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在棋盘上如何放置棋子本身就是一种试探行为,当发现不符合放置规则的时候,就需要撤回所放置的妻子是一个正常操作,因此可以想到利用回溯算法来解决这个问题,由于最终需要输出所有放置方案,所以需要借助一个列表来表示每一行中皇后的位置,将第一行中皇后放置在第1列。

在放置每个皇后时候都需要判断是否会与已经放置的之前的皇后发生冲突,为了方便复用以及解耦,可以先定义一个判断函数,传入当前的坐标位置行数和列数,然后与返回列表中已经确定的皇后来进行逐个对比判断,如果产生冲突则由判断函数来返回false,表示此位置是不可以放置皇后的,而所谓冲突,就是不能同行、同列、同对角线,同行和同列会比较容易判断,对于同对角线如何判断会稍微麻烦一些。

判断同对角线,对于两个坐标(x1,y1)、(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值