So easy(?)
2026-02-26 11:12:37
发布于:上海
2阅读
0回复
0点赞
这里用了BFS算法,题解如下:
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int MAX=100000;
int N,K;
int vis[MAX+5];
struct node{
int pos;
int time;
};
void BFS(){
queue<node> q;
q.push({N,0});
vis[N]=0;
while(q.size()){
node now=q.front();
q.pop();
if(now.pos==K){
cout<<now.time;
return;
}
int next_pos[3]={now.pos-1,now.pos+1,now.pos*2};//步数有三种情况
for(int i=0;i<3;i++){
int np=next_pos[i];
//边界情况
if(np<0||np>MAX){
continue;
}
if(vis[np]==-1){
vis[np]=now.time+1;
q.push({np,now.time+1});
}
}
}
}
signed main(){
cin>>N>>K;
memset(vis,-1,sizeof(vis));//初始化vis数组,都为-1
BFS();
}
这里空空如也







有帮助,赞一个