AcWing 1076. 迷宫问题
原题链接
简单
作者:
大笔筒
,
2022-01-28 23:18:32
,
所有人可见
,
阅读 182
#include<iostream>
#include<cstring>
#include<queue>
#define INF 0x3f
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N=1010;
int a[N][N];
bool st[N][N];
int n;
PII End={0,0};
PII path[N][N];
void bfs()
{
queue<PII> Q;
Q.push({n-1,n-1});
st[n-1][n-1]=true;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
while(!Q.empty())
{
PII t=Q.front();
Q.pop();
for(int i=0;i<4;i++)
{
int x=t.x+dx[i],y=t.y+dy[i];
if(x>=0 && x<n && y>=0 && y<n && a[x][y]==0 && st[x][y]==false)
{
Q.push({x,y});
st[x][y]=true;
path[x][y]=t;
}
}
}
}
int main()
{
memset(a,INF,sizeof a);
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
bfs();
printf("%d %d\n",End.x,End.y);
while(End.x!=n-1 || End.y!=n-1)
{
int x=End.x,y=End.y;
printf("%d %d\n",path[x][y].x,path[x][y].y);
End=path[x][y];
}
return 0;
}