输入样例:
5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
输出样例:
0 0
1 0
2 0
2 1
2 2
2 3
2 4
3 4
4 4
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
int n;
const int N = 1010;
int g[N][N];
PII q[N];
PII pre[N][N];
void bfs(int sx,int sy){
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,-1,0,1 };
int hh = 0, tt = 0;
q[0] = { sx,sy};
memset(pre, -1, sizeof(pre));
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()
{
scanf("%d", &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];
}
system("pause");
return 0;
}
/*
输入样例:
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
*/