Python基于回溯法子集树模板实现8皇后问题

作者:罗兵 时间:2023-09-25 08:34:45 

本文实例讲述了Python基于回溯法子集树模板实现8皇后问题。分享给大家供大家参考,具体如下:

问题

8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

Python基于回溯法子集树模板实现8皇后问题

分析

为了简化问题,考虑到8个皇后不同行,则每一行放置一个皇后,每一行的皇后可以放置于第0、1、2、...、7列,我们认为每一行的皇后有8种状态。那么,我们只要套用子集树模板,从第0行开始,自上而下,对每一行的皇后,遍历它的8个状态即可。

代码:


'''
8皇后问题
'''
n = 8
x = [] # 一个解(n元数组)
X = [] # 一组解
# 冲突检测:判断 x[k] 是否与前 x[0~k-1] 冲突
def conflict(k):
global x
for i in range(k):        # 遍历前 x[0~k-1]
 if x[i]==x[k] or abs(x[i]-x[k])==abs(i-k): # 判断是否与 x[k] 冲突
  return True
return False
# 套用子集树模板
def queens(k): # 到达第k行
global n, x, X
if k >= n:   # 超出最底行
 #print(x)
 X.append(x[:]) # 保存(一个解),注意x[:]
else:
 for i in range(n): # 遍历第 0~n-1 列(即n个状态)
  x.append(i)  # 皇后置于第i列,入栈
  if not conflict(k): # 剪枝
   queens(k+1)
  x.pop()   # 回溯,出栈
# 解的可视化(根据一个解x,复原棋盘。'X'表示皇后)
def show(x):
global n
for i in range(n):
 print('. ' * (x[i]) + 'X ' + '. '*(n-x[i]-1))
# 测试
queens(0) # 从第0行开始
print(X[-1], '\n')
show(X[-1])

效果图

Python基于回溯法子集树模板实现8皇后问题

希望本文所述对大家Python程序设计有所帮助。

来源:http://www.cnblogs.com/hhh5460/p/6919204.html

标签:Python,回溯法,8皇后问题
0
投稿

猜你喜欢

  • 如何快速定位页面中复杂 CSS BUG 问题

    2009-01-15 12:23:00
  • Django urls.py重构及参数传递详解

    2022-10-05 14:20:53
  • Python 迭代器Iterator详情

    2021-10-12 07:01:42
  • Python Pygame实战之打砖块小游戏

    2021-04-10 01:41:11
  • Python tkinter实现计算器功能

    2023-06-29 15:41:29
  • 详解Django模版中加载静态文件配置方法

    2023-11-16 19:55:13
  • MySQL数据库磁盘优化

    2008-11-24 17:29:00
  • Yii2框架实现登陆添加验证码功能示例

    2023-11-21 11:36:32
  • Python实现字符串中某个字母的替代功能

    2021-09-28 13:13:02
  • 如何把中文转换为UNICODE?

    2009-11-07 18:39:00
  • IE10增强对HTML5和CSS3的支持

    2011-09-16 20:16:28
  • python使用Apriori算法进行关联性解析

    2022-08-15 13:02:10
  • python中黄金分割法实现方法

    2022-05-15 01:45:24
  • Python3.7安装keras和TensorFlow的教程图解

    2022-09-05 13:23:00
  • Python装饰器的应用场景代码总结

    2022-09-22 19:24:54
  • django认证系统 Authentication使用详解

    2021-10-02 19:05:07
  • 利用ASP在线维护数据库

    2007-10-12 13:53:00
  • 谈谈XHTML中CDATA

    2007-09-17 12:45:00
  • Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)

    2021-09-14 00:22:11
  • 分享css处理浏览器兼容问题上的小技巧

    2008-02-03 14:41:00
  • asp之家 网络编程 m.aspxhome.com