1. 程式人生 > 實用技巧 >3.走迷宮 BFS

3.走迷宮 BFS

所有邊的權重都是1時,才可以用BFS求最短路

否則要用專門的最短路演算法來求最短路

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef pair<int, int> PII;
 4 queue<PII> q;
 5 int n, m;
 6 const int N = 110;
 7 int mp[N][N];
 8 int d[N][N]; //儲存每一個點到起點的距離
 9 int bfs() {
10     int dx[4] = {-1, 0, 1, 0};
11     int dy[4
] = {0, 1, 0, -1}; 12 while (!q.empty()) { 13 PII t = q.front(); //取出隊頭 14 q.pop(); //彈出隊頭 15 for (int i = 0; i < 4; i++) { //嘗試向四個方向擴充套件 16 int x = t.first + dx[i]; 17 int y = t.second + dy[i]; 18 if (x >= 0 && x < n && y >= 0
&& y < m && mp[x][y] == 0 && d[x][y] == -1) { //並且這個點還沒有走過的話 19 d[x][y] = d[t.first][t.second] + 1; 20 q.push({x, y}); 21 } 22 } 23 } 24 return d[n - 1][m - 1]; 25 } 26 int main() { 27 cin >> n >> m;
28 for (int i = 0; i < n; i++) { 29 for (int j = 0; j < m; j++) { 30 cin >> mp[i][j]; 31 } 32 } 33 memset(d, -1, sizeof(d)); 34 d[0][0] = 0; 35 q.push({0, 0}); 36 cout << bfs() << endl; 37 return 0; 38 }