最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python解決走迷宮問(wèn)題算法示例

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

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

問(wèn)題:

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

思路:

深度優(yōu)先遍歷,到達(dá)每一個(gè)點(diǎn),記錄從起點(diǎn)到達(dá)每一個(gè)點(diǎn)的最短步數(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)先遍歷的時(shí)候防止出界
2 把所有障礙改成-1,把能走的地方改成0
3 每次遍歷經(jīng)歷某個(gè)點(diǎn)的時(shí)候,如果當(dāng)前節(jié)點(diǎn)值是0 把花費(fèi)的步數(shù)存到節(jié)點(diǎn)里
                            如果當(dāng)前節(jié)點(diǎn)值是-1 代表是障礙 不遍歷它
                            如果走到當(dāng)前節(jié)點(diǎn)花費(fèi)的步數(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 是遍歷的時(shí)候防止出界的

默認(rèn)從左上角的點(diǎn)是入口 右上角的點(diǎn)是出口

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個(gè)點(diǎn):
    如果周圍節(jié)點(diǎn)不是-1 說(shuō)明 不是障礙 在此基礎(chǔ)上:
        里面是0 說(shuō)明沒(méi)遍歷過(guò) 我們把它修改成當(dāng)前所在位置步數(shù)加1
        里面比當(dāng)前的next_step大 說(shuō)明不是最優(yōu)方案 就修改它
        里面比當(dāng)前next_step說(shuō)明當(dāng)前不是最優(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])

運(yùn)行結(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:本站還有一個(gè)無(wú)限迷宮游戲,基于JS實(shí)現(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ìn)階經(jīng)典教程

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

相關(guān)文章

  • 使用Python編寫基于DHT協(xié)議的BT資源爬蟲

    使用Python編寫基于DHT協(xié)議的BT資源爬蟲

    這篇文章主要介紹了使用Python編寫基于DHT協(xié)議的BT資源爬蟲的方法,文中對(duì)于DHT協(xié)議的相關(guān)知識(shí)也作了補(bǔ)充說(shuō)明,需要的朋友可以參考下
    2016-03-03
  • Python對(duì)象與引用的介紹

    Python對(duì)象與引用的介紹

    今天小編就為大家分享一篇關(guān)于Python對(duì)象與引用的介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 在PyCharm下打包*.py程序成.exe的方法

    在PyCharm下打包*.py程序成.exe的方法

    今天小編就為大家分享一篇在PyCharm下打包*.py程序成.exe的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Pycharm 常用快捷鍵大全(全網(wǎng)最全)

    Pycharm 常用快捷鍵大全(全網(wǎng)最全)

    本文詳細(xì)介紹了Pycharm中多種提高編程效率的快捷鍵操作,包括代碼格式化、代碼合并、修正代碼警告等,適合Python開(kāi)發(fā)者使用,感興趣的可以了解一下
    2024-11-11
  • PyQt5中QCommandLinkButton的詳細(xì)教程與應(yīng)用實(shí)戰(zhàn)

    PyQt5中QCommandLinkButton的詳細(xì)教程與應(yīng)用實(shí)戰(zhàn)

    在PyQt5中,QCommandLinkButton是一個(gè)特殊的按鈕控件,它最初在Windows Vista中引入,并因其獨(dú)特的外觀和功能在GUI應(yīng)用程序中得到了廣泛應(yīng)用,本教程將結(jié)合實(shí)際案例,詳細(xì)介紹QCommandLinkButton在PyQt5中的用法,需要的朋友可以參考下
    2024-07-07
  • wxpython 最小化到托盤與歡迎圖片的實(shí)現(xiàn)方法

    wxpython 最小化到托盤與歡迎圖片的實(shí)現(xiàn)方法

    這篇文章主要分享一個(gè)python實(shí)例代碼,使用wxpython實(shí)現(xiàn)最小化到托盤與歡迎圖片,需要的朋友可以參考下
    2014-06-06
  • Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼

    Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • PyQt5實(shí)現(xiàn)下載進(jìn)度條效果

    PyQt5實(shí)現(xiàn)下載進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)下載進(jìn)度條效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python數(shù)據(jù)類型之Tuple元組實(shí)例詳解

    Python數(shù)據(jù)類型之Tuple元組實(shí)例詳解

    這篇文章主要介紹了Python數(shù)據(jù)類型之Tuple元組,結(jié)合實(shí)例形式分析了Python元組類型的概念、定義、讀取、連接、判斷等常見(jiàn)操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • Django中的用戶身份驗(yàn)證示例詳解

    Django中的用戶身份驗(yàn)證示例詳解

    這篇文章主要給大家介紹了關(guān)于Django中用戶身份驗(yàn)證的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

凌海市| 绥德县| 墨玉县| 斗六市| 象山县| 阿城市| 讷河市| 西吉县| 正镶白旗| 庆安县| 瓦房店市| 分宜县| 阿城市| 玉树县| 望谟县| 兖州市| 桐庐县| 芷江| 东乌珠穆沁旗| 拜泉县| 平利县| 广德县| 岳池县| 陈巴尔虎旗| 广平县| 图木舒克市| 南召县| 奉化市| 会东县| 车致| 惠安县| 黄骅市| 灵宝市| 马鞍山市| 会泽县| 香港 | 昌黎县| 新密市| 云南省| 南皮县| 辽阳县|