Python使用回溯法子集樹模板解決爬樓梯問題示例

2022-10-04 20:57:16 字數 853 閱讀 5950

問題

某樓梯有n層台階,每步只能走1級台階,或2級台階。從下向上爬樓梯,有多少種爬法?

分析這個問題之前用分治法解決過。但是,這裡我要用回溯法www.cppcns.com子集樹模板解決它。

祭出元素-狀態空間分析**:每一步是乙個元素,可走的步數[1,2]就是其狀態空間。不難看出,元素不固定,狀態空間固定。

直接上**。

**'''爬樓梯'''

n = 7 # 樓梯階數

x = # 乙個解(長度不固定,1-2陣列,表示該步走的台階數)

x = # 一組解

# 衝突檢測

def conflict(k):

global n, x, x

# 部分解步的步數之和超過總台階數

if sum(x[:k+1]) > n:

return true

return false # 無衝突

# 回溯法(遞迴版本)

def climb_stairs(k): # 走第k程式設計客棧步

global n, x, x

if sum(www.cppcns.comx) == n: # 已走的所有步數之和等於樓梯總台階數

print(x)

#x.append(x[:]) # 儲存(乙個解)

else:

for i in [1, 2]: # 第k步這個元素的狀態空間為[1,2]

x.append(i)

if not conflict(k): # 剪枝

climb_stairs(k+1)

x.pop() # 回溯

# 測試

climb_stairs(0) # 走第0步

效果圖

Python使用回溯法子集樹模板解決迷宮問題示例

問題 給定乙個迷宮,入口已知。問是否有路徑從入口到出口,若有則輸出一條這樣的路徑。注意移動可以從上 下 左 右 上左 上右 下左 下右八個方向進行。迷宮輸入0表示可走,輸入1表示牆。為方便起見,用1將迷宮圍起來避免邊界問題。分析考慮到左 右是相對的,因此修改為 北 東北 東 東南 南 西南 西 西北...

python 用回溯法(子集樹)解n皇后問題

n皇后問題 如何能夠在 n n 的西洋棋棋盤上放置n個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后。為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。def backtrack t,n 核心 if t n output return else for i in range n a t ...

Python 回溯法 子集樹模組系列 八皇后問題

案例 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 n ...