bfs演算法 844 走迷宮 列印路徑

2021-10-18 10:41:05 字數 1850 閱讀 6188

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

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

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

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

輸入格式

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

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

輸出格式

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

資料範圍

1≤n,m≤100

輸入樣例:

5 50 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

#include

using

namespace std;

const

int n =

1e2+7;

int g[n]

[n];

//儲存地圖

int d[n]

[n];

//標記搜尋到的點的距離

int n,m;

typedef pair<

int,

int> pii;

intbfs()

);//將第乙個點入隊

memset

( d,-1

,sizeof d)

;//初始化d ,距離為-1

d[0]

[0]=

0;//從左上角第乙個點搜尋,表明第乙個已經搜過

int dx[4]

=,dy[4]

=;//方向盤,用於對4個方向拓展

while

(q.size()

));//新座標入隊}}

}return d[n-1]

[m-1];

//輸出右下角點距離起點的距離

}int

main()

列印路徑

#include

using

namespace std;

const

int n =

1e2+7;

int g[n]

[n];

//儲存地圖

int d[n]

[n];

//標記搜尋到的點的距離

int n,m;

typedef pair<

int,

int> pii;

pii preve[n]

[n];

intbfs()

);//將第乙個點入隊

memset

( d,-1

,sizeof d)

;//初始化d ,距離為-1

d[0]

[0]=

0;//從左上角第乙個點搜尋,表明第乙個已經搜過

int dx[4]

=,dy[4]

=;//方向盤,用於對4個方向拓展

while

(q.size()

));//新座標入隊}}

}int x = n-

1, y =m-1;

while

(x||y)

return d[n-1]

[m-1];

//輸出右下角點距離起點的距離

}int

main()

bfs佇列的演算法,走迷宮

problem description 有乙個二維迷宮,n行m列,s 表示迷宮的起點,t 表示迷宮的終點,表示圍牆,表示通路。現在從s出發,你不能穿牆,問到達終點t最少需要多少步?輸入格式 第一行輸入n,m 1 n,m 50 表示迷宮的行列大小。接下來輸入n行字串表示迷宮。輸出格式 乙個整數,表示走...

簡單BFS 走迷宮

描述 l上次旅行進入了乙個迷宮,他被困在了乙個n m的矩形迷宮中。l開始在左上角的點,他知道出口在右下角,他可以向四個方向移動到相鄰的點。不過這個迷宮有些魔法,每個格仔有一種顏色,不同的顏色代表不一樣的功能 如果格仔是紅色的,表示當前格仔無法通行 如果格仔是粉紅,表示格仔可以正常通行 如果是橙色,當...

BFS 走迷宮問題

已知圖g v,e 和乙個源頂點s,寬度優先搜尋以一種系統的方式探尋g的邊,從而 發現 s所能到達的所有頂點,並計算s到所有這些頂點的距離 最少邊數 該演算法同時能生成一棵根為s且包括所有可達頂點的寬度優先樹。對從s可達的任意頂點v,寬度優先樹中從s到v的路徑對應於圖g中從s到v的最短路徑,即包含最小...