#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node{//三种数据
int x;
int y;
int step;
}que[1001];
int sx,sy,ex,ey;
int book[1001][1001],map[1001][1001];
//标记该点是搜索过
int nt[4][2]={{0,-1}/*左*/,{1,0}/*下*/,{0,1}/*右*/,{-1,0}/*上*/};
int head=1;int tail=1;int flag=0;
//bfs函数
int n,m;
void bfs(){
//起点入队
que[tail].y=sy;
que[tail].x=sx;
que[tail].step=0;
tail++;
//非空入队
while(head<tail){
for(int i=0;i<4;i++){
int tx=que[head].x+nt[i][0];
int ty=que[head].y+nt[i][1];
//六大条件 不越界 未搜索 是通路
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&book[tx][ty]==0&&map[tx][ty]==0){
book[tx][ty]=1;
que[tail].x=tx;
que[tail].y=ty;
que[tail].step=que[head].step+1;
}
if(tx==ex&&ty==ey){
flag=1;
break;
}
}
if(flag==1)break;
head++;//弹出队列,开始新一轮搜索
}
}
int main(){
//输入数据
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>map[i][j];
}
}
cin>>sx>>sy>>ex>>ey;
//广搜获得结果
bfs();
//输出
cout<<que[tail-1].step;
return 0;
}
找师傅(独家)
最新推荐文章于 2024-07-08 22:12:26 发布
本文介绍了使用C++编写的广度优先搜索(BFS)算法,用于在给定的二维网格地图中寻找两点之间的最短路径,通过标记已访问节点并维护队列实现搜索过程。
摘要由CSDN通过智能技术生成