广搜模板
2024-11-10 15:33:09
发布于:广东
4阅读
0回复
0点赞
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 1e6+1;
queue<int> q;//这是一个队列!!!!!!!!!!
int d[N];
int n,k;
//定义BFS,开启广搜
void bfs(int n,int k){
memset(d,-1,sizeof(d));//初始化d全为 -1 加入现在的点都 没到过,到了归最小步数
//①起始节点放入队列,并标记为已访问
q.push(n);
d[n]=0;
while(q.size()){
//②取队首 ,不要忘记还要弹走一个空间
int r = q.front();
q.pop();
//如果这个队首就是我们要的位置,即可当前点的最小步数
if(r == k ) {
cout<<d[r];
break;
}
//③找邻居,找到就要看是不是被访问过,没有被访问过就入队
if(r>=1&&d[r-1]==-1) {
d[r-1]=d[r]+1;
q.push(r-1);
}
if(r<=100000&&d[r+1]==-1) {
d[r+1]=d[r]+1;
q.push(r+1);
}
if(2*r<=100000&&d[r*2]==-1) {
d[r*2]=d[r]+1;
q.push(r*2);
}
}
}
int main(){
cin>>n>>k;
//开启B风扇 BFS
bfs(n,k);
return 0;
}
这里空空如也
有帮助,赞一个