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

首頁 > 編程 > Python > 正文

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

2020-01-04 14:48:01
字體:
來源:轉載
供稿:網友

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

問題:

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

思路:

深度優先遍歷,到達每一個點,記錄從起點到達每一個點的最短步數

初始化案例:

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 , 在深度優先遍歷的時候防止出界
2 把所有障礙改成-1,把能走的地方改成0
3 每次遍歷經歷某個點的時候,如果當前節點值是0 把花費的步數存到節點里
                            如果當前節點值是-1 代表是障礙 不遍歷它
                            如果走到當前節點花費的步數比里面存的小,就修改它

修改后的圖:

-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])#深度優先遍歷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個點:    如果周圍節點不是-1 說明 不是障礙 在此基礎上:        里面是0 說明沒遍歷過 我們把它修改成當前所在位置步數加1        里面比當前的next_step大 說明不是最優方案 就修改它        里面比當前next_step說明當前不是最優方案,不修改  '''  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])

運行結果:

(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

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


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 敖汉旗| 吉水县| 清丰县| 宜宾县| 鄂州市| 长寿区| 尉犁县| 临漳县| 奇台县| 定边县| 晴隆县| 长岭县| 伊通| 江达县| 神木县| 儋州市| 和龙市| 黎城县| 米易县| 稷山县| 双牌县| 襄垣县| 崇明县| 钟山县| 方山县| 阿鲁科尔沁旗| 郯城县| 南澳县| 耒阳市| 长武县| 河北省| 海兴县| 教育| 拉孜县| 鱼台县| 鄂托克前旗| 运城市| 中江县| 澄城县| 兴和县| 安庆市|