简单bfs题。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 #define N 150000 5 using namespace std; 6 queue<int>q; 7 int n,k,t[N]; 8 void bfs() 9 { 10 int i; 11 memset(t,-1,sizeof(t)); 12 while(!q.empty()) q.pop(); 13 t[n]=0; 14 q.push(n); 15 while(!q.empty()) 16 { 17 i=q.front(),q.pop(); 18 if(i-1>=0 && t[i-1]==-1) 19 { 20 t[i-1]=t[i]+1; 21 if(i-1==k) return; 22 q.push(i-1); 23 } 24 if(i+1<=N && t[i+1]==-1) 25 { 26 t[i+1]=t[i]+1; 27 if(i+1==k) return; 28 q.push(i+1); 29 } 30 if(2*i<=N && t[2*i]==-1) 31 { 32 t[2*i]=t[i]+1; 33 if(2*i==k) return; 34 q.push(2*i); 35 } 36 } 37 } 38 int main() 39 { 40 while(~scanf("%d%d",&n,&k)) 41 { 42 if(n>=k) printf("%d\n",n-k); 43 else bfs(),printf("%d\n",t[k]); 44 } 45 return 0; 46 }