国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python基于回溯法子集樹模板實現8皇后問題

2020-02-16 10:09:07
字體:
來源:轉載
供稿:網友

本文實例講述了Python基于回溯法子集樹模板實現8皇后問題。分享給大家供大家參考,具體如下:

問題

8×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相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河池市| 盐边县| 紫金县| 报价| 滨海县| 正宁县| 镇原县| 清苑县| 胶南市| 同心县| 高邑县| 容城县| 德令哈市| 德安县| 遵化市| 安康市| 延安市| 华池县| 兴国县| 乌鲁木齐县| 大理市| 漳平市| 建水县| 罗甸县| 贵溪市| 聊城市| 永清县| 宾阳县| 墨玉县| 怀仁县| 沈阳市| 三门县| 六安市| 河池市| 舟山市| 乐亭县| 丰都县| 乌兰县| 西青区| 津市市| 沙田区|