Python基於遞迴演算法實現的走迷宮問題

2022-09-28 08:15:08 字數 1291 閱讀 1938

什麼是遞迴?

簡單地理解就是函式呼叫自身的過程就稱之為遞迴。

什麼時候用到遞迴?

如果乙個問題可以表示為更小規模的迭代運算,就可以使用遞迴演算法。

迷宮問題:乙個由0或1構成的二維陣列中,假設1是可以移動到的點,0是不能程式設計客棧移動到的點,如何從陣列中間乙個值為1的點出發,每一只能朝上下左右四個方向移動乙個單位,當移動到二維陣列的邊緣,即可得到問題的解,類似的問題都可以稱為迷宮問題。

在python中可以使用list巢狀ctitqmfu表示二維陣列。假設乙個6*6的迷宮,問題時從該陣列座標[3][3]出發,判斷能不能成功的走出迷宮。

maze=[[1,0,0,1,0,1],

[1,1,1,0,1,0],

[0,0,1,0,1,0],

[0,1,1,1,0,0],

[0,0,0,1,0,0],

[1,0,0,0,0,0]]

針對這個迷宮問題,我們可以使用遞迴的思想很好的解決。對於陣列中的乙個點,該點的四個方向可以通過橫縱座標的加減輕鬆的表示,每當移動的乙個可移動的點時候,整個問題又變為ctitqmfu和初始狀態一樣的問題,繼續搜尋四個方向找可以移動的點,知道移動到陣列的邊緣。

所以我們可以這樣編碼:

# 判斷座標的有效性,如果超出陣列邊界或是不滿足值為1的條件,說明該點無效返回false,否則返回true。

def valid(maze,x,y):

if (x>=0 and x程式設計客棧y>=0 and yctitqmfu y==0):

print("successful!")

return true

# 遞迴主體實現

if valid(maze,x,y):

# print(x,y)

maze[x][y]=2 # 做標記,防止折回

# 針對四個方向依次試探,如果失敗,撤銷一步

if not walk(maze,x-1,y):

maze[x][y]=1

elif not walk(maze,x,y-1):

maze[x][y]=1

elif not walk(maze,x+1,y):

maze[x][y]=1

elif not walk(maze,x,y+1):

maze[x][y]=1

else:

return false # 無路可走說明,沒有解

return true

walk(maze,3,3)

遞迴是個好東西呀!

ps:本站還有乙個無限迷宮遊戲,基於js實現,提供給大家參考一下:

**迷宮小遊戲:

python遞迴實現 遞迴演算法 python實現

在函式的定義中對這個函式自身的呼叫,就是遞迴。遞迴結構中,遞迴的部分必須比原來的整體簡單,才有可能到達某種終結點 出口 而且必須存在非遞迴的基本結構構成的部分,否則會無限遞迴。學習目標 程式設計實現斐波那契數列求值 f n f n 1 f n 2 程式設計實現求階乘 n 程式設計實現一組資料集合的全...

python實現遞迴演算法

usr bin env python coding utf 8 def recursive 1 n 樓梯有n階台階,上樓可以一步上3階,也可以一步上5階,計算共有多少種不同的走法?設n階台階的走法數為f n 如果台階數小於等於3,走法有2種 一步上3個台階或者5個台階 即f n 3 2 如果台階數為...

Python 實現遞迴演算法

1 遞迴的定義 遞迴就是子程式 或函式 直接呼叫自己或通過一系列呼叫語句間接呼叫自己,是一種描述問題和解決問題的基本方法。遞迴常與分治思想同時使用,能產生許多高校的演算法。遞迴常用來解決結構相似的問題。所謂結構相似,是指構成原問題的子問題與原問題在結構上相似,可以用類似的方法解決。具體地,整個問題的...