Python基於回溯法子集樹模板解決馬踏棋盤問題樣本,python棋盤

來源:互聯網
上載者:User

Python基於回溯法子集樹模板解決馬踏棋盤問題樣本,python棋盤

本文執行個體講述了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步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.