gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python基于回溯法子集树模板实现8皇后问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

问题 。

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

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

分析 。

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

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'''
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皇后问题的文章就讲到这里了,如果你想了解更多关于Python基于回溯法子集树模板实现8皇后问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com