八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的 n 皇后摆放问题:这时棋盘的大小变为 n1×n1,而皇后个数也变成 n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。
八皇后问题最早是由国际西洋棋棋手马克斯・贝瑟尔于 1848 年提出。之后陆续有数学家对其进行研究,其中包括高斯和康托,并且将其推广为更一般的 n 皇后摆放问题。八皇后问题的第一个解是在 1850 年由弗朗兹・诺克给出的。诺克也是首先将问题推广到更一般的 n 皇后摆放问题的人之一。1874 年,S. 冈德尔提出了一个通过行列式来求解的方法,这个方法后来又被 J.W.L. 格莱舍加以改进。
艾兹格・迪杰斯特拉在 1972 年用这个问题为例来说明他所谓结构性编程的能力。
八皇后问题出现在 1990 年代初期的著名电子游戏第七访客中。文章来源:https://www.toymoban.com/news/detail-741373.html
下面是测试代码:文章来源地址https://www.toymoban.com/news/detail-741373.html
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
#* queen problem with recurison
BOARD_SIZE = 8
def under_attack(col, queens):
left = right = col
for r, c in reversed(queens):
#左右有冲突的位置的列号
left, right = left - 1, right + 1
if c in (left, col, right):
return True
return False
def solve(n):
if n == 0:
return [[]]
smaller_solutions = solve(n - 1)
return [solution+[(n,i+1)]
for i in xrange(BOARD_SIZE)
for solution in smaller_solutions
if not under_attack(i+1, solution)]
for answer in solve(BOARD_SIZE):
print answer
到了这里,关于Python 解决八皇后问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!