1252:走迷宫
#include<bits/stdc++.h>
using namespace std;
struct node{//新增step以记录所走步数
int x,y,step;
}que[2510];
char mp[50][50];//地图
int f,r;//队首,队尾
int n,m;//行列
int fx[4][2]={{0,-1},{0,1},{1,0},{-1,0}};//方向
void bfs(int x,int y){
f=r=1;//初始化队列
que[r].x=x , que[r].y=y , mp[x][y]='#' , que[r].step=1;//插入,并将脚下设为已走,注意,这里的最短步数是要算上第一步的
while(f<=r){
node t;
t.x=que[f].x , t.y=que[f].y , t.step=que[f].step;//记录队首
if(t.x==n-1 && t.y==m-1){//判断是否走到右下角
cout<<t.step<<endl;//输出步数
break;
}
for(int i=0;i<4;i++){
int nx=t.x+fx[i][0];//下一步的横坐标
int ny=t.y+fx[i][1];//下一步的纵坐标
if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny]=='.'){//约束条件
mp[nx][ny]='#';//将当前位置改成已走过
r++;//准备入队
que[r].x=nx;
que[r].y=ny;
que[r].step=t.step+1;//每遍历一次步数+1
}
}
f++;//队首出队
}
}
int main(){
//输入
cin>>n>>m;
for(int i=0;i<n;i++) cin>>mp[i];
//从左上角开始,即从(0,0)开始遍历
bfs(0,0);
return 0;
}