N皇后问题
研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
即皇后所放置的位置需要满足以下三个条件:
·同一横线上不能存在皇后
·同一竖线上不能存在皇后
·以该皇后位置为中心,斜率为正负一的两条斜线上不能存在皇后
其中前两个条件我相信大多数人都能够轻易实现,主要是第三个斜线问题比较难以解决。在这里我是使用的比较简单粗暴的办法来实现它,所以看起来可能有些愚笨。
解题过程
首先设置一个二维列表充当棋盘,其中用‘.’来表示该位置为空,用‘Q’来表示该位置已被放置皇后。
n为棋盘的大小
n = 5
chess = [['.' for i in range(n)] for i in range(n)]
然后是简单的检查该列上有没有皇后已经存在,如果已经存在则返回False,如果检查完毕仍为发现皇后存在则返回True 。
def checkcol(col):
for row in range(n):
if chess[row][col] == 'Q':
return False
return True
然后是检查斜线上是否存在皇后,这里我采取的方法是将两条斜线分割成四份,然后逐个检查。其中i,j为当前想要放置皇后的位置。
def checkslant(i,j):
row = i-1
col