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

首頁 > 編程 > Python > 正文

Python基于遞歸算法實現(xiàn)的走迷宮問題

2020-02-16 02:00:58
字體:
供稿:網(wǎng)友

本文實例講述了Python基于遞歸算法實現(xiàn)的走迷宮問題。分享給大家供大家參考,具體如下:

什么是遞歸?

簡單地理解就是函數(shù)調(diào)用自身的過程就稱之為遞歸。

什么時候用到遞歸?

如果一個問題可以表示為更小規(guī)模的迭代運算,就可以使用遞歸算法。
迷宮問題:一個由0或1構(gòu)成的二維數(shù)組中,假設(shè)1是可以移動到的點,0是不能移動到的點,如何從數(shù)組中間一個值為1的點出發(fā),每一只能朝上下左右四個方向移動一個單位,當(dāng)移動到二維數(shù)組的邊緣,即可得到問題的解,類似的問題都可以稱為迷宮問題。

在python中可以使用list嵌套表示二維數(shù)組。假設(shè)一個6*6的迷宮,問題時從該數(shù)組坐標(biāo)[3][3]出發(fā),判斷能不能成功的走出迷宮。

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]]

針對這個迷宮問題,我們可以使用遞歸的思想很好的解決。對于數(shù)組中的一個點,該點的四個方向可以通過橫縱坐標(biāo)的加減輕松的表示,每當(dāng)移動的一個可移動的點時候,整個問題又變?yōu)楹统跏紶顟B(tài)一樣的問題,繼續(xù)搜索四個方向找可以移動的點,知道移動到數(shù)組的邊緣。

所以我們可以這樣編碼:

# 判斷坐標(biāo)的有效性,如果超出數(shù)組邊界或是不滿足值為1的條件,說明該點無效返回False,否則返回True。def valid(maze,x,y):  if (x>=0 and x<len(maze) and y>=0 and y<len(maze[0]) and maze[x][y]==1):    return True  else:    return False# 移步函數(shù)實現(xiàn)def walk(maze,x,y):  # 如果位置是迷宮的出口,說明成功走出迷宮  if(x==0 and y==0):    print("successful!")    return True  # 遞歸主體實現(xiàn)  if valid(maze,x,y):    # print(x,y)    maze[x][y]=2 # 做標(biāo)記,防止折回    # 針對四個方向依次試探,如果失敗,撤銷一步    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 Truewalk(maze,3,3)

遞歸是個好東西呀!

PS:本站還有一個無限迷宮游戲,基于JS實現(xiàn),提供給大家參考一下:

在線迷宮小游戲:
http://tools.jb51.net/games/migong

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》

希望本文所述對大家Python程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东阿县| 桃江县| 高唐县| 武强县| 长乐市| 卓资县| 新乡市| 灌云县| 江西省| 天津市| 上犹县| 梨树县| 青州市| 东平县| 鹿邑县| 肇东市| 安远县| 东宁县| 昭苏县| 通河县| 阿鲁科尔沁旗| 盖州市| 霍城县| 洞头县| 荔波县| 顺义区| 双城市| 交口县| 林州市| 洛宁县| 金阳县| 巨野县| 仙居县| 诏安县| 化州市| 洪江市| 政和县| 新竹县| 临清市| 裕民县| 秀山|