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

首頁 > 編程 > Python > 正文

Python基于回溯法子集樹模板解決馬踏棋盤問題示例

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

本文實例講述了Python基于回溯法子集樹模板解決馬踏棋盤問題。分享給大家供大家參考,具體如下:

問題

將馬放到國際象棋的8*8棋盤board上的某個方格中,馬按走棋規則進行移動,走遍棋盤上的64個方格,要求每個方格進入且只進入一次,找出一種可行的方案。

分析

說明:這個圖是5*5的棋盤。

類似于迷宮問題,只不過此問題的解長度固定為64

每到一格,就有[(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)]順時針8個方向可以選擇。

走到一格稱為走了一步,把每一步看作元素,8個方向看作這一步的狀態空間。

套用回溯法子集樹模板。

代碼

'''馬踏棋盤'''n = 5 # 8太慢了,改為5p = [(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)] # 狀態空間,8個方向entry = (2,2) # 出發地x = [None]*(n*n) # 一個解,長度固定64,形如[(2,2),(4,3),...]X = []    # 一組解# 沖突檢測def conflict(k):  global n,p, x, X  # 步子 x[k] 超出邊界  if x[k][0] < 0 or x[k][0] >= n or x[k][1] < 0 or x[k][1] >= n:    return True  # 步子 x[k] 已經走過  if x[k] in x[:k]:    return True  return False # 無沖突# 回溯法(遞歸版本)def subsets(k): # 到達第k個元素  global n, p, x, X  if k == n*n: # 超出最尾的元素    print(x)    #X.append(x[:]) # 保存(一個解)  else:    for i in p: # 遍歷元素 x[k-1] 的狀態空間: 8個方向      x[k] = (x[k-1][0] + i[0], x[k-1][1] + i[1])      if not conflict(k): # 剪枝        subsets(k+1)# 測試x[0] = entry # 入口subsets(1)  # 開始走第k=1步

效果圖

更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 四川省| 彩票| 海林市| 澜沧| 德化县| 咸宁市| 泸西县| 渭源县| 阳山县| 莱芜市| 礼泉县| 麦盖提县| 屏东市| 东阿县| 永川市| 金秀| 新乐市| 疏附县| 宕昌县| 沅陵县| 鄂尔多斯市| 彭泽县| 镇赉县| 云南省| 扬州市| 上饶市| 宝山区| 湘潭市| 滨海县| 姜堰市| 长乐市| 洛隆县| 广西| 和静县| 靖西县| 济南市| 谢通门县| 郯城县| 礼泉县| 治多县| 潜江市|