题目链接:http://poj.org/problem?id=3278
题目是简单的bfs,我却花了好多时间调试
///2014.4.5
///poj3278
//16MS
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define MAXLENGTH 400100
struct node
{
int line;
int deep;
};
int N,K;
node queue[MAXLENGTH];
bool visited[MAXLENGTH];
int bfs(int n){
memset(visited,false,sizeof(visited) );
int head,tail;
head = 0;
tail = 1;
queue[0].line = n;
queue[0].deep = 0;
visited[n] = true;
while( head<tail ){
if( !visited[queue[head].line - 1] && queue[head].line-1 >= 0 ){
queue[tail].line = queue[head].line - 1;
queue[tail].deep = queue[head].deep + 1;
visited[queue[head].line-1] = true;
if( queue[tail].line==K ){
break;
}
tail++;
}
if( !visited[queue[head].line + 1] && queue[head].line+1<=K ){
queue[tail].line = queue[head].line + 1;
queue[tail].deep = queue[head].deep + 1;
visited[queue[head].line+1] = true;
if( queue[tail].line==K ){
break;
}
tail++;
}
if( !visited[queue[head].line * 2] && queue[head].line<=K ){
queue[tail].line = queue[head].line * 2;
queue[tail].deep = queue[head].deep + 1;
visited[queue[head].line*2] = true;
if( queue[tail].line==K ){
break;
}
tail++;
}
head++;
}
return queue[tail].deep;
}
int main()
{
// freopen("in","r",stdin);
// freopen("out","w",stdout);
while( cin>>N>>K ){
if( N>K )
cout<<N-K<<endl;
else if( N==K )
cout<<"0"<<endl;
else
cout<<bfs(N)<<endl;
}
return 0;
}