迷宫问题
作者:
李小鞠
,
2024-03-09 22:07:40
,
所有人可见
,
阅读 30
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 1010;
int g[N][N];
PII pre[N][N];
queue<PII> q;
int n;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
void bfs(int sx, int sy){
memset(pre, -1, sizeof pre);
q.push({sx, sy});
pre[sx][sy] = {0, 0};
while (q.size()){
PII t = q.front();
q.pop();
for (int i = 0; i < 4; i ++ ){
int a = t.x + dx[i], 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.push({a, b});
pre[a][b] = t;
}
}
}
int main(){
cin >> n;
for (int i = 0; i < n; i ++ ){
for (int j = 0; j < n; j ++ ){
scanf("%d", &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];
}
return 0;
}