题解
2026-08-05 17:31:27
发布于:辽宁
1阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int n, m, dp[2005][2005], sx, sy, ex, ey;
char mp[2005][2005];
bool vis[2005][2005], f;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
bool inmp(int x, int y) {return x >= 1 && x <= n && y >= 1 && y <= m;}
int main() {
cin >> n >> m;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= m;j++) {
cin >> mp[i][j];
if (mp[i][j] == '@') sx = i, sy = j;
if (mp[i][j] == '*') ex = i,ey = j;
}
}
queue<pair<int, int>> q;
q.push({sx, sy});
while (!q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();
if (x == ex && y == ey) {
f = 1;
break;
}
vis[x][y] = 1;
for (int k = 0;k < 4;k++) {
int nx = x + dx[k];
int ny = y + dy[k];
if (!inmp(nx, ny) || vis[nx][ny] || mp[nx][ny] == '#') continue;
vis[nx][ny] = 1;
dp[nx][ny] = dp[x][y] + 1;
q.push({nx, ny});
}
}
cout << (f ? dp[ex][ey] : -1);
}
这里空空如也







有帮助,赞一个