/*
3278 Catch That Cow
*/
#include <iostream>
#include <queue>
using namespace std;
const int MAX = 200004;
bool ans[MAX];
int n,k;
struct Node{
int num;
int index;
Node(int _num, int _index):num(_num),index(_index) {}
};
int get( int i, int num )
{
if( i == 1 )
return num - 1;
if( i == 2 )
return num + 1;
if( i == 3 )
return num << 1;
}
bool check( int num )
{
if( num >= 0 && num <= 200000 )
return true;
else
return false;
}
int bfs( int n )
{
queue<Node> q;
Node start = Node(n, 0);
q.push( start );
ans[ start.num ] = true;
while( true )
{
Node temp = q.front();
for( int i = 1; i <= 3; i++ )
{
Node next = Node( get(i, temp.num), temp.index + 1 );
if( check(next.num) && ans[ next.num ] == false )
{
if( next.num == k )
return next.index;
else
{
q.push( next );
ans[ next.num ] = true;
}
}
}
q.pop();
}
}
int main()
{
int i;
for( i = 0; i < MAX; i++ )
ans[i] = false;
cin >> n >> k;
if( n >= k )
cout << n - k << endl;
else
cout << bfs(n) << endl;
return 0;
}
bfs算法。
MAX为10000的两倍多。
i << 1;是i*2