@lingdantiancai
2016-04-21T04:34:17.000000Z
字数 619
阅读 1864
Python,八皇后
昨天看到八皇后这个问题,看了俩天,终于觉得有点头绪了。(我是菜鸟,俩天才看会,(:)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。
首先设置一个元组state[],这里存储所有皇后的位置。
给这个类传入上一个皇后的位置信息和将要传入皇后的列坐标位置。
先计算这是第几个皇后len(state)
然后判断将要传入的皇后位置是不是与已经排好的皇后在同一行或者在同一对角线上。
接下来让我们直接考虑最后一个皇后的位置怎么排放。便利所有可能位置。
def queens(num, state):
if len(state) == num - 1:
for pos in range(num):
if not conflict(state, pos):
yield pos