3.走迷宮 BFS
阿新 • • 發佈:2020-07-16
所有邊的權重都是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 }