尋找迷宮中的最短路徑

2021-09-29 02:56:25 字數 1314 閱讀 8948

給定乙個n*m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。

最初,有乙個人位於左上角(1, 1)處,已知該人每次可以向上、下、左、右任意乙個方向移動乙個位置。

請問,該人從左上角移動至右下角(n, m)處,至少需要移動多少次。

資料保證(1, 1)處和(n, m)處的數字為0,且一定至少存在一條通路。

輸入格式

第一行包含兩個整數n和m。

接下來n行,每行包含m個整數(0或1),表示完整的二維陣列迷宮。

輸出格式

輸出乙個整數,表示從左上角移動至右下角的最少移動次數。

資料範圍

1≤n,m≤1001≤n,m≤100

輸入樣例:

5 5

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

輸出樣例:

8

1,起始點座標加入佇列,設定距離為0

2,while 佇列不為空,隊頭出隊乙個節點,如果這個節點的上/下/左/右可以到達(不碰壁、不超過邊界,之前未被訪問),則把能到達的加入佇列,距離+1

3,如果到達終點,返回距離

import sys

n, m = map(int, sys.stdin.readline().strip().split())

a =

for i in range(n):

# visited初始化

vis = [[false for j in range(m)] for i in range(n)]

vis[0][0] = true

que =

# 加入的是這個節點的元組表示(x,y,距離)

# 四個方向

dx=[-1,0,1,0]

dy=[0,-1,0,1]

while len(que) != 0:

x, y, c = que.pop(0)

# 出口,到達終點

if x == n-1 and y == m-1:

print c

for i in range(4):

nx=x+dx[i]

ny=y+dy[i]

if nx >= 0 and nx < n and ny >= 0 and ny < m and a[nx][ny] == 0 and vis[nx][ny]==false:

vis[nx][ny] = true

自動尋找走出迷宮的最短路徑

演算法心得 1.利用廣度優先遍歷 bfs 實現尋找最短路徑 2.利用樹的思想,將每走一步的終點與它的起點相連線,這樣就能在最後把整條最短路徑找出來 設定乙個結構體,儲存座標 struct note que size size 儲存座標和連線指標 struct tree ans size 2 size...

迷宮最短路徑

include include using namespace std const int max n 100,max m 100 const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pairp 輸入 char maze max ...

迷宮最短路徑

問題描述 小a同學現在被困在了乙個迷宮裡面,他很想從迷宮中走出來,他可以向上 向下 向左 向右移動 每移動一格都需要花費1秒的時間,不能夠走到邊界之外。假設小a現在的位置在s,迷宮的出口在e,迷宮可能有多個出口。問小a想要走到迷宮出口最少需要花費多少秒?並輸出從起點到最近出口的路徑。任務要求 1 迷...