#include <iostream>
#include <stdio.h>
using namespace std;
long long a[200020][2];
bool b[200020];
int main()
{ long long n,k,f,r,maxx=100000;
cin>>n>>k;
for (f=0;f<=200000;f++) b[f]=0;
f=1;r=f;
a[f][1]=n;a[f][0]=0;
while (a[f][1]!=k)
{
if (b[a[f][1]-1]==0)
{
r++;
a[r][1]=a[f][1]-1;
a[r][0]=a[f][0]+1;
b[a[r][1]]=1;
}
if (b[a[f][1]+1]==0&&a[f][1]+1<=maxx)
{
r++;
a[r][1]=a[f][1]+1;
a[r][0]=a[f][0]+1;
b[a[r][1]]=1;
}
if (b[a[f][1]*2]==0&&a[f][1]*2<=maxx)
{
r++;
a[r][1]=a[f][1]*2;
a[r][0]=a[f][0]+1;
b[a[r][1]]=1;
}
f++;
}
cout<<a[f][0];
return 0;
}
题意:
给定两个整数n和k
通过 n+1或n-1 或n*2 这3种操作,使得n==k
输出最少的操作次数
BFS