AcWing 844. 走迷宫
原题链接
简单
作者:
术
,
2021-01-20 15:50:18
,
所有人可见
,
阅读 206
走迷宫加路径
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int,int> PII;
const int N=105;
int n,m;
int a[N][N];
int d[N][N];//距离,也可以当作visit
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
PII pre_path[N][N];
int bfs(){
queue<PII> q;
int res=0;
q.push({0,0});
memset(d,-1,sizeof d);
d[0][0]=0;
while(!q.empty()){
int x=q.front().first;
int y=q.front().second;
q.pop();
for(int i=0;i<4;i++){
int s=x+dx[i];
int t=y+dy[i];
if(s>=0&&s<n&&t>=0&&t<m&&a[s][t]==0&&d[s][t]==-1){
q.push({s,t});
pre_path[s][t]={x,y};
d[s][t]=d[x][y]+1;
}
}
}
int x=n-1,y=m-1;
while(x||y){
cout<<x<<" "<<y<<endl;
PII t=pre_path[x][y];
x=t.first;
y=t.second;
}
return d[n-1][m-1];
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
cout<<bfs()<<endl;
//cout << "Hello world!" << endl;
return 0;
}