【转】http://blog.csdn.net/zxy_snow/article/details/5738154
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Q[300000];
int count[300000];
int sta[300000];
int n,head,tail;
void Enq(int x)
{
Q[head++] = x;
}
int Deq(void)
{
return Q[tail++];
}
int Qempty()
{
if( head == tail)
return 1;
return 0;
}
int main(void)
{
int N,K,temp;
while(scanf("%d%d",&N,&K)!=EOF)
{
head = 0;
tail = 0;
memset(count,0,sizeof(count));
memset(Q,0,sizeof(Q));
memset(sta,0,sizeof(sta));
Enq(N);
sta[N] = 1;
while( !Qempty() )
{
N = Deq();
if( N == K)
{
printf("%d/n",count[N]);
break;
}
temp = N+1;
if( temp<=100000 && sta[temp] == 0)
{
sta[temp] = 1;
count[temp] = count[N] + 1;
Enq(temp);
}
temp = N-1;
if( temp>=0 && sta[temp] == 0)
{
sta[temp] = 1;
count[temp] = count[N] + 1;
Enq(temp);
}
temp = N*2;
if( temp<=100000 && sta[temp] == 0)
{
sta[temp] = 1;
count[temp] = count[N] + 1;
Enq(temp);
}
}
}
system("pause");
return 0;
}