#include<iostream>
#include<cstring>
#include<queue>
const int N=110;
int n,m;
typedef pair<int,int> PII;
int g[N][N];//存图
int d[N][N];//记录距离
PII q[N*N];//队列存放走的路线
int bfs(){
queue <PII> q;
q[0]={0,0};//起始位置
memset(d,-1,sizeof d);//初始化d为-1
d[0][0]=0;//源点到起点的位置
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
while(!q.empty()){
auto t=q.front();
q.pop();
for(int i=0;i<4;i++){//记录分别从四个方向走
int x=t.first+dx[i];
int y=t.second+dy[i];
if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]=0&&d[x][y]==-1){
d[x][y]=d[t.first][t.second]+1;//距离+1,消除没走过的状态
q[++t]={x,y};//把点加进队列
}
}
}
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>>g[i][j];//先输入地图
cout<<bfs()<<endl;
}
标签:PII,int,迷宫,bfs,second,&&,include From: https://www.cnblogs.com/chenxinyue/p/17224210.html