迷宫路径BFS
作者:
恒_41
,
2024-04-21 21:47:00
,
所有人可见
,
阅读 2
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int, int> PII;
#define x first
#define y second
const int N = 1010, M = N * N;
int dx[4] = { -1, 0, 1, 0 }; // 4方向偏移量
int dy[4] = { 0, 1, 0, -1 };
int n;
int g[N][N];
PII q[M];
PII pre[N][N];
void bfs(int sx, int sy) {
int hh = 0, tt = 0;
memset(pre, -1, sizeof pre);
q[0] = { sx,sy };
pre[sx][sy] = { 0,0 };
while (hh <= tt) {
PII t = q[hh++];
for (int i = 0; i < 4; i++) {
int a = t.x + dx[i];
int b = t.y + dy[i];
if (a < 0 || a >= n || b < 0 || b >= n) continue;
if (g[a][b]) continue;
if (pre[a][b].x!=-1) continue;
q[++tt] = { a,b };
pre[a][b] = t;
}
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> g[i][j];
bfs(n - 1, n - 1);
PII end(0, 0);
while (true) {
printf("%d %d\n", end.x, end.y); // 输出答案
if (end.x == n - 1 && end.y == n - 1) break;
end = pre[end.x][end.y];
}
}