迷宮問題:乙個由0或1構成的二維陣列中,假設1是可以移動到的點,0是不能移動到的點,如何從陣列中間乙個值為1的點出發,每一只能朝上下左右四個方向移動乙個單位,當移動到二維陣列的邊緣,即可得到問題的解,類似的問題都可以稱為迷宮問題。
在python中可以使用list巢狀表示二維陣列。假設乙個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]]
# 判斷座標的有效性,如果超出陣列邊界或是不滿足值為1的條件,說明該點無效返回false,否則返回true。
defvalid
(maze,x,y):
if (x>=0
and xand y>=0
and y0]) and maze[x][y]==1):
return
true
else:
return
false
# 移步函式實現
defwalk
(maze,x,y):
# 如果位置是迷宮的出口,說明成功走出迷宮
if(x==0
and y==0):
print("successful!")
return
true
# 遞迴主體實現
if valid(maze,x,y):
# print(x,y)
maze[x][y]=2
# 做標記,防止折回
# 針對四個方向依次試探,如果失敗,撤銷一步
ifnot 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)
遞迴是個好東西呀! Python基於遞迴演算法實現的走迷宮問題
什麼是遞迴?簡單地理解就是函式呼叫自身的過程就稱之為遞迴。什麼時候用到遞迴?如果乙個問題可以表示為更小規模的迭代運算,就可以使用遞迴演算法。迷宮問題 乙個由0或1構成的二維陣列中,假設1是可以移動到的點,0是不能程式設計客棧移動到的點,如何從陣列中間乙個值為1的點出發,每一只能朝上下左右四個方向移動...
遞迴 走迷宮
時間限制 1 sec 記憶體限制 128 mb 提交 78 解決 17 提交 狀態 討論版 命題人 外部匯入 有乙個n m格的迷宮 表示有n行 m列 其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,檔案讀入這n m個資料和起始點 結束點 起始點和結束點都是用兩個資料來描述的,分別表示這...
走迷宮演算法
從起點問題的提出 在遊戲地圖中,如何尋找一條從起點到終點的最短行路線路?資料表達 使用m n大小的byte陣列 來表示地圖,每個位置的狀態用0表示可走,1表示牆,2表示起點,3表示終點,128表示路徑 行走規則有兩種 4方向行走規則 只能從當前點向上,下,左,右 這4個方向行走 8方向行走規則 可以...