BFS模板题
  • 板块题目总版
  • 楼主syrPUBG2008
  • 当前回复9
  • 已保存回复9
  • 发布时间2020/10/30 20:23
  • 上次更新2023/11/5 09:29:24
查看原帖
BFS模板题
287639
syrPUBG2008楼主2020/10/30 20:23

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;
}

看完记得点赞+关注哦!

2020/10/30 20:23
加载中...