1254 走出迷宫
因为这道题的根本性质上就是迷宫模板,所以具体讲解看我的 1215 迷宫 即可
链接:https://www.cnblogs.com/qwn34/p/13732506.html
上代码 BFS()
#include<bits/stdc++.h> using namespace std; struct node{//结构体方便存放同一个点的横纵坐标及每走一步的步数 int x,y,step; }que[10010]; int f,r;//队首队尾 char mp[105][105];//地图 int n,m,sx,sy,edx,edy;//地图行列,起始位置,终点 int fx[4][2]={{1,0},{-1,0},{0,-1},{0,1}};//方位 void pr(){//测试函数 cout<<"-------"<<endl; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout<<mp[i][j]; } cout<<endl; } } void bfs(int x,int y){ f=r=1;//队列初始化 que[r].x=x , que[r].y=y , que[r].step=0 ,mp[x][y]='#';//将起点信息插入队尾,并将其记录为已走 while(f<=r){ node t; t.x=que[f].x , t.y=que[f].y , t.step=que[f].step;//获取队首信息 if(t.x==edx && t.y==edy){//达到条件时输出,并直接退出即可 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]='#';//将当前位置标记为已走过 // pr(); r++; que[r].x=nx;//插入队尾 que[r].y=ny; que[r].step=t.step+1;//并计数 } } f++;//队首出队 } } int main(){ //输入 cin>>n>>m; for(int i=0;i<n;i++) cin>>mp[i]; // pr(); //记录起点和终点,并将其转化为可走的'.' for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(mp[i][j]=='S'){ sx=i , sy=j; mp[sx][sy]='.'; } if(mp[i][j]=='T'){ edx=i , edy=j; mp[edx][edy]='.'; } } } // cout<<sx<<" "<<sy<<endl; // cout<<edx<<" "<<edy<<endl; bfs(sx,sy); return 0; }
感谢支持!!