经典八皇后问题(python)
本帖最后由 yinda_peng 于 2023-5-24 23:04 编辑八皇后问题(英文:Eight queens),是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。
问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。如果经过±90度、±180度旋转,和对角线对称变换的摆法看成一类,共有42类。计算机发明后,有多种计算机语言可以编程解决此问题。
def solveNQueens(n):
def DFS(queens, xy_dif, xy_sum):
p = len(queens)
if p == n:
result.append(queens)
return None
for q in range(n):
if q not in queens and p-q not in xy_dif and p+q not in xy_sum:
DFS(queens+, xy_dif+, xy_sum+)
result = []
DFS([], [], [])
return [[ "."*i + "Q" + "."*(n-i-1) for i in sol] for sol in result]#列表推导式创建二维列表
n = int(input("请输入n的值:"))
count = 0
for solution in solveNQueens(n):
print('\n'.join(solution))
count += 1
print()#空行分隔
print("总共有{}个解".format(count))
我之前把自己在知乎的一篇有关代数的文章搬过来了,有兴趣的朋友可以看看https://fishc.com.cn/thread-228674-1-1.html
@夏季的春秋 @Judie @元豪 @Threebody1 来康康 来了来了,比c的代码简单好多啊 夏季的春秋 发表于 2023-5-24 23:10
来了来了,比c的代码简单好多啊
我也有C的代码 夏季的春秋 发表于 2023-5-24 23:10
来了来了,比c的代码简单好多啊
不过是抄书上的hhh 币 yinda_peng 发表于 2023-5-24 23:07
@夏季的春秋 @Judie @元豪 @Threebody1 来康康
Threebody1是我小号,别叫他{:10_277:} 歌者文明清理员 发表于 2023-5-24 23:13
Threebody1是我小号,别叫他
是谁在诋毁我{:10_244:} 歌者文明清理员 发表于 2023-5-24 23:13
Threebody1是我小号,别叫他
因为没加你大号,现在加你 Threebody1 发表于 2023-5-24 23:13
是谁在诋毁我
精神分裂症 币啊,别绝缘啊 {:5_106:} interesting question! 递归越简单,越难理解 {:5_108:}
{:10_275:} {:5_106:} 看一看 学习深度优先搜索算法时学习的{:10_256:} Python,有意思有意思{:10_256:} 666
页:
[1]
2