欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python解決走迷宮問題算法示例

 更新時間:2018年07月27日 14:15:11   作者:稀里糊涂林老冷  
這篇文章主要介紹了Python解決走迷宮問題算法,結(jié)合實例形式分析了Python基于二維數(shù)組的深度優(yōu)先遍歷算法解決走迷宮問題相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python解決走迷宮問題算法。分享給大家供大家參考,具體如下:

問題:

輸入n * m 的二維數(shù)組 表示一個迷宮
數(shù)字0表示障礙 1表示能通行
移動到相鄰單元格用1步

思路:

深度優(yōu)先遍歷,到達每一個點,記錄從起點到達每一個點的最短步數(shù)

初始化案例:

1   1   0   1   1
1   0   1   1   1
1   0   1   0   0
1   0   1   1   1
1   1   1   0   1
1   1   1   1   1

1 把圖周圍加上一圈-1 , 在深度優(yōu)先遍歷的時候防止出界
2 把所有障礙改成-1,把能走的地方改成0
3 每次遍歷經(jīng)歷某個點的時候,如果當前節(jié)點值是0 把花費的步數(shù)存到節(jié)點里
                            如果當前節(jié)點值是-1 代表是障礙 不遍歷它
                            如果走到當前節(jié)點花費的步數(shù)比里面存的小,就修改它

修改后的圖:

-1      -1   -1  -1   -1   -1      -1
-1      0    0   -1    0    0      -1
-1      0   -1    0    0    0      -1
-1      0   -1    0   -1   -1      -1
-1      0   -1    0    0    0      -1
-1      0    0    0   -1    0      -1
-1      0    0    0    0    0      -1
-1      -1   -1  -1   -1   -1      -1

外周的-1 是遍歷的時候防止出界的

默認從左上角的點是入口 右上角的點是出口

Python代碼:

# -*- coding:utf-8 -*-
def init():
  global graph
  graph.append([-1,  -1, -1, -1, -1, -1,  -1])
  graph.append([-1,  0, 0, -1, 0, 0,  -1])
  graph.append([-1,  0, -1, 0, 0, 0,  -1])
  graph.append([-1,  0, -1, 0, -1, -1,  -1])
  graph.append([-1,  0, -1, 0, 0, 0,  -1])
  graph.append([-1,  0, 0, 0, -1, 0,  -1])
  graph.append([-1,  0, 0, 0, 0, 0,  -1])
  graph.append([-1,  -1, -1, -1, -1, -1,  -1])
#深度優(yōu)先遍歷
def deepFirstSearch( steps , x, y ):
  global graph
  current_step = steps + 1
  print(x, y, current_step )
  graph[x][y] = current_step
  next_step = current_step + 1
  '''
  遍歷周圍4個點:
    如果周圍節(jié)點不是-1 說明 不是障礙 在此基礎(chǔ)上:
        里面是0 說明沒遍歷過 我們把它修改成當前所在位置步數(shù)加1
        里面比當前的next_step大 說明不是最優(yōu)方案 就修改它
        里面比當前next_step說明當前不是最優(yōu)方案,不修改
  '''
  if not(x-1== 1 and y==1) and graph[x-1][y] != -1 and ( graph[x-1][y]>next_step or graph[x-1][y] ==0 ) : #左
    deepFirstSearch(current_step, x-1 , y )
  if not(x == 1 and y-1==1) and graph[x][y-1] != -1 and ( graph[x][y-1]>next_step or graph[x][y-1] ==0 ) : #上
    deepFirstSearch(current_step, x , y-1 )
  if not(x == 1 and y+1==1) and graph[x][y+1] != -1 and ( graph[x][y+1]>next_step or graph[x][y+1]==0 ) : #下
    deepFirstSearch(current_step, x , y+1 )
  if not(x+1== 1 and y==1) and graph[x+1][y] != -1 and ( graph[x+1][y]>next_step or graph[x+1][y]==0 ) : #右
    deepFirstSearch(current_step, x+1 , y )
if __name__ == "__main__":
  graph = []
  init()
  deepFirstSearch(-1,1,1)
  print(graph[1][5])

運行結(jié)果:

(1, 1, 0)
(1, 2, 1)
(2, 1, 1)
(3, 1, 2)
(4, 1, 3)
(5, 1, 4)
(5, 2, 5)
(5, 3, 6)
(4, 3, 7)
(3, 3, 8)
(2, 3, 9)
(2, 4, 10)
(1, 4, 11)
(1, 5, 12)
(2, 5, 13)
(2, 5, 11)
(4, 4, 8)
(4, 5, 9)
(5, 5, 10)
(6, 5, 11)
(6, 4, 12)
(6, 3, 13)
(6, 2, 14)
(6, 1, 15)
(6, 3, 7)
(6, 2, 8)
(6, 1, 9)
(6, 4, 8)
(6, 5, 9)
(6, 2, 6)
(6, 1, 7)
(6, 1, 5)
12

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

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

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

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

相關(guān)文章

  • Python?functools凍結(jié)參數(shù)小技巧實現(xiàn)代碼簡潔優(yōu)化

    Python?functools凍結(jié)參數(shù)小技巧實現(xiàn)代碼簡潔優(yōu)化

    這篇文章主要為大家介紹了Python?functools凍結(jié)參數(shù)小技巧實現(xiàn)代碼簡潔優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Python中的QPixmap用法詳解

    Python中的QPixmap用法詳解

    QPixmap主要用于繪圖,針對圖像顯示而最佳化設(shè)計,這篇文章主要介紹了Python中的QPixmap用法,對QPixmap使相關(guān)知識感興趣的朋友一起看看吧
    2023-03-03
  • Python2.5/2.6實用教程 入門基礎(chǔ)篇

    Python2.5/2.6實用教程 入門基礎(chǔ)篇

    本文方便有經(jīng)驗的程序員進入Python世界.本文適用于python2.5/2.6版本.
    2009-11-11
  • Python input函數(shù)實現(xiàn)獲取鍵盤輸入的字符串流程講解

    Python input函數(shù)實現(xiàn)獲取鍵盤輸入的字符串流程講解

    這篇文章主要介紹了Python input函數(shù)實現(xiàn)獲取鍵盤輸入的字符串流程,input()是Python的內(nèi)置函數(shù),用于從控制臺讀取用戶輸入的內(nèi)容。input()函數(shù)總是以字符串的形式來處理用戶輸入的內(nèi)容,所以用戶輸入的內(nèi)容可以包含任何字符
    2023-01-01
  • 如何利用Python寫個坦克大戰(zhàn)

    如何利用Python寫個坦克大戰(zhàn)

    這篇文章主要給大家介紹了關(guān)于如何利用Python寫個坦克大戰(zhàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 構(gòu)建高效的python requests長連接池詳解

    構(gòu)建高效的python requests長連接池詳解

    這篇文章主要介紹了構(gòu)建高效的python requests長連接池詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 老生常談python之鴨子類和多態(tài)

    老生常談python之鴨子類和多態(tài)

    下面小編就為大家?guī)硪黄仙U刾ython之鴨子類和多態(tài)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python新手必讀bytearray對象使用技巧掌握

    Python新手必讀bytearray對象使用技巧掌握

    Python中的bytearray是一個可變序列,通常用于存儲二進制數(shù)據(jù),它允許在不創(chuàng)建新的對象的情況下就地修改數(shù)據(jù),非常適用于處理字節(jié)數(shù)據(jù),本文將深入學(xué)習(xí)bytearray對象的使用,包括創(chuàng)建、修改、切片和常見應(yīng)用場景
    2023-12-12
  • python中dtypes和type()函數(shù)的區(qū)別示例詳解

    python中dtypes和type()函數(shù)的區(qū)別示例詳解

    type()是python內(nèi)置的函數(shù),type()返回數(shù)據(jù)結(jié)構(gòu)類型(list、dict、numpy.ndarray 等),dtype返回數(shù)據(jù)元素的數(shù)據(jù)類型(int、float等),這篇文章主要給大家介紹了關(guān)于python中dtypes和type()函數(shù)區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Python對象屬性自動更新操作示例

    Python對象屬性自動更新操作示例

    這篇文章主要介紹了Python對象屬性自動更新操作,結(jié)合實例形式對比分析了Python對象屬性自動更新的原理,并改進了屬性互聯(lián)操作實現(xiàn)方法,需要的朋友可以參考下
    2018-06-06

最新評論