#include<iostream> #include<queue> #include<utility>//pair容器的头文件 #include<cstring>//memset using namespace std; const int N = 1e2+7; int n,m; int g[N][N],d[N][N];//g数组用来存储迷宫地图,d数组用来存储每个位置到起点的距离 queue <pair<int,int>> q; int bfs() { int dx[]={-1,0,1,0},dy[]={0,1,0,-1};//定义方向数组 memset(d,-1,sizeof(d));//把d数组的全部元素初始化为-1,用于标记未被访问过的坐标 d[0][0]=0;//起点到起点的距离为0 q.push({0,0});//知道d[横坐标][纵坐标]的值后,就将此点纳入讨论范畴(讨论它的上下左右),此处是对起点进行如此操作,后续所有点都是这样:先知其距离,再论其邻居 while (!q.empty()) { auto t=q.front();//t其实是个pair //也可以这么写 pair<int,int> t= q.front(); q.pop();//形象化描述:q.front()交给临时变量后(登个记)就可以放心走了 for (int i = 0; i < 4; i++) { int x=t.first+dx[i],y=t.second+dy[i]; if (x>=0 && x<n && y>=0 && y<m && g[x][y]!=1 && d[x][y]==-1) { d[x][y]=d[t.first][t.second]+1; q.push({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++) { scanf("%d",&g[i][j]); } } cout<<bfs()<<endl; return 0; }
标签:int,迷宫,++,front,AC.844,数组,pair,include From: https://www.cnblogs.com/shinnyblue/p/17205475.html