保证过
2024-11-17 17:37:12
发布于:江苏
2阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 50;
char mp[MAXN][MAXN];
int n, m;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
bool in(int x, int y) {
return (x >= 1 && x <= n && y >= 1 && y <= m);
}
int BFS() {
queue<pair<int, int>> q;
q.push({1, 1});
mp[1][1] = '#'; // 标记起点已访问
int steps = 1;
while (!q.empty()) {
int size = q.size();
for (int k = 0; k < size; ++k) {
int x = q.front().first, y = q.front().second;
q.pop();
if (x == n && y == m) {
return steps;
}
for (int i = 0; i < 4; ++i) {
int nx = x + dir[i][0], ny = y + dir[i][1];
if (in(nx, ny) && mp[nx][ny] == '.') {
q.push({nx, ny});
mp[nx][ny] = '#'; // 标记已访问
}
}
}
++steps;
}
return -1; // 理论上不会执行到这里
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> mp[i][j];
}
}
int result = BFS();
cout << result << endl;
return 0;
}
这里空空如也
有帮助,赞一个