广搜-题解
2024-04-21 21:54:09
发布于:上海
4阅读
0回复
0点赞
这道题目是一道经典广度优先搜索题,我们可以用队列queue来存储每一个节点,如果能够到达终点那么更新最少移动次数,否则继续添加节点,并删除当前节点。(当然还要判断节点能不能走)
#include<iostream>
#include<queue>
using namespace std;
int s=2147483647,x=5,y=5;
bool map[50][50],vis[50][50];
struct node{
int x,y,step;
};
void bfs(){
queue<node>q;
q.push({1,1,0});
while(!q.empty()){
node f=q.front();
vis[f.x][f.y]=1;
q.pop();
if(f.x==x&&f.y==y){
s=min(f.step,s);
}else{
if(f.x-1&&map[f.x-1][f.y]&&!vis[f.x-1][f.y])q.push({f.x-1,f.y,f.step+1});
if(f.y-1&&map[f.x][f.y-1]&&!vis[f.x][f.y-1])q.push({f.x,f.y-1,f.step+1});
if(x-f.x&&map[f.x+1][f.y]&&!vis[f.x+1][f.y])q.push({f.x+1,f.y,f.step+1});
if(y-f.y&&map[f.x][f.y+1]&&!vis[f.x][f.y+1])q.push({f.x,f.y+1,f.step+1});
}
}
}
int main(){
for(int i=1;i<=x;i++)for(int j=1;j<=y;j++){
bool b;
cin>>b;
map[i][j]=!b;
}
bfs();
cout<<(s==2147483647?-1:s)<<endl;
return 0;
}
这里空空如也
有帮助,赞一个