常规题解
2026-08-08 14:47:19
发布于:广东
32阅读
0回复
0点赞
bfs的模板题,创建队列便利可到达的点
#include<bits/stdc++.h>
using namespace std;
int n,m,sy,sx,gy,gx;
char a[105][105];
bool vis[105][105];
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};//方向数组
struct node{
int x,y,step;//积累当前位置与步数
};
void bfs(){
queue<node> q;
q.push({sy,sx,0});//放入起点
vis[sy][sx]=1;
while(!q.empty()){
node t=q.front();//取出下一步要遍历的点
q.pop();
if(t.x==gy&&t.y==gx){//到终点后输出
cout << t.step;
break;
}
for(int i=0;i<4;i++){
int nx=t.x+dx[i],ny=t.y+dy[i];
if(a[nx][ny]=='.'&&!vis[nx][ny]&&nx>=1&&ny>=1&&nx<=n&&ny<=m){
//判断是否越界或已访问
q.push({nx,ny,t.step+1});//放入队列
vis[nx][ny]=1;//标记已访问
}
}
}
}
int main(){
cin >> n >> m >> sy >> sx >> gy >> gx;//输入
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];//输入数组
}
}
bfs();//调用函数
return 0;
}
这里空空如也




有帮助,赞一个