最短路模型1:1076
作者:
总打瞌睡的天天啊
,
2024-10-20 14:30:16
,
所有人可见
,
阅读 1
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
typedef pair<int,int> PII;
int g[N][N];
PII pre[N][N];//模拟dist数组
bool st[N][N];
PII q[N*N];
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int n;
void bfs(int x,int y)
{
memset(pre,-1,sizeof pre);
q[0]={x,y};
int hh=0,tt=0;
while(hh<=tt)
{
auto t=q[hh++];
int rx=t.first,ry=t.second;
st[rx][ry]=true;
for(int i=0;i<4;i++)
{
int wx=rx+dx[i],wy=ry+dy[i];
if(wx<0||wy<0||wx>n-1||wy>n-1)continue;
if(g[wx][wy]==1||st[wx][wy])continue;
if(pre[wx][wy].first!=-1)continue;
pre[wx][wy]=t;
q[++tt]={wx,wy};
}
}
}
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)
{
cout<<'('<<end.first<<", "<<end.second<<')'<<endl;
if(end.first==n-1&&end.second==n-1)break;
end=pre[end.first][end.second];
}
return 0;
}
//(0, 0)
//(0, 0)