給定乙個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的最短路徑,即包含最小...