简单的BFS
分三种方法进行搜索 x+1 x-1 x*2;
根据BFS的性质 第一次找到K的 一定是用时间最少的。
#include <stdio.h>
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int x,k;
int num[100010];//记录搜索到的位置
int ans;
int bfs()
{
queue <int > que;
que.push(x);
num[x]=0;
while(!que.empty())
{
int fx=que.front();
que.pop();
if(fx==k) break;
for(int i=0;i<3;i++)
{
int fy;
if(i==0)
{
fy=fx-1;
}
if(i==1)
{
fy=fx+1;
}
if(i==2)
{
fy=fx*2;
}
if(num[fy]==0&&fy>=0&&fy<=100001)
{
num[fy]=num[fx]+1;
que.push(fy);
}
}
}
return num[k];
}
int main()
{
//freopen("in.in","r",stdin);
scanf("%d %d",&x,&k);
ans=0;
memset(num,0,sizeof(num));
ans=bfs();
printf("%d",ans);
return 0;
}