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

來源:互聯網
上載者:User

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

本文執行個體講述了Python基於遞迴演算法實現的走迷宮問題。分享給大家供大家參考,具體如下:

什麼是遞迴?

簡單地理解就是函數調用自身的過程就稱之為遞迴。

什麼時候用到遞迴?

如果一個問題可以表示為更小規模的迭代運算,就可以使用遞迴演算法。
迷宮問題:一個由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。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# 移步函數實現def walk(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 # 做標記,防止折回    # 針對四個方向依次試探,如果失敗,撤銷一步    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實現,提供給大家參考一下:

線上迷宮小遊戲:
http://tools.jb51.net/games/migong

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.