BFS模板题,太水了。
#include<iostream>
#include<queue>
using namespace std;
int n,m;
char map[1000][1000];
int visit[1000][1000];//每个点是否被访问
struct point{//点的结构体
int x;
int y;
};
queue<point> que;//点的队列
int bx[4]={1,0,-1,0};//下标变化规律
int by[4]={0,1,0,-1};//同上
int BFS(int x,int y){//参数为起点的下标
visit[x][y]=1;//起点的步数为1
que.push({x,y});//将起点放入队列中
while(!que.empty()){//队列为空时,循环
point tmp=que.front();//取出队首的点
que.pop();//将此点删除
if(map[tmp.x][tmp.y]=='T'){
return visit[tmp.x][tmp.y];
}
for(int i=0;i<4;i++){
int tx=tmp.x+bx[i];//计算移动后下标
int ty=tmp.y+by[i];
if(tx>=0&&tx<n&&ty>=0&&ty<m&&visit[tx][ty]==0&&map[tx][ty]!='X'){
que.push({tx,ty});//将此点放入队列中
visit[tx][ty]=visit[tmp.x][tmp.y] + 1;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>map[i];
}
int a,b;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(map[i][j]=='S')a=i,b=j;
}
}
cout<<BFS(a,b)<<endl;
return 0;
}
看完记得点赞+关注哦!