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

首頁 > 編程 > Python > 正文

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

2020-01-04 16:43:26
字體:
來源:轉載
供稿:網友

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

問題

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

分析

Python,回溯法,子集樹模板,馬踏棋盤問題

說明:這個圖是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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江安县| 莱芜市| 桂东县| 文昌市| 陆河县| 台北县| 武平县| 清涧县| 丽水市| 定襄县| 江阴市| 临漳县| 登封市| 洱源县| 巴楚县| 台中县| 东港市| 平遥县| 秦安县| 百色市| 孙吴县| 彭阳县| 河东区| 科尔| 湖北省| 南阳市| 扎囊县| 沁源县| 大埔县| 康乐县| 彰化市| 香河县| 吉林省| 新巴尔虎左旗| 乐都县| 荔浦县| 韩城市| 淮南市| 陆良县| 德惠市| 卓资县|