bfs。
#include<iostream>
#include<queue>
using namespace std;
int N, K;
struct Node
{
int i, s;
Node(){}
Node(int i, int s)
{
this->i = i;
this->s = s;
}
};
bool vis[2000005];
int bfs()
{
queue<Node> q;
q.push(Node(N, 0));
vis[N] = true;
Node u;
while(q.size())
{
u = q.front();
q.pop();
if(u.i == K)
return u.s;
if(u.i < 0 || u.i > 1000000)
continue;
if(!vis[u.i - 1])
{
q.push(Node(u.i - 1, u.s + 1));
vis[u.i - 1] = true;
}
if(!vis[u.i + 1])
{
q.push(Node(u.i + 1, u.s + 1));
vis[u.i + 1] = true;
}
if(!vis[2 * u.i])
{
q.push(Node(2 * u.i, u.s + 1));
vis[2 * u.i] = true;
}
}
}
int main()
{
cin >> N >> K;
cout << bfs() << endl;
// system("pause");
return 0;
}