这个春学期的最后啦
来源:POJ3278
搜索,注意判断条件的使用
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
queue<int>Q;
int n,k;
int ans;
const int MAXN=1000000+10;
int dp[MAXN];
int main(){
scanf("%d%d",&n,&k);
ans=0;
memset(dp,-1,sizeof(dp));
//while(!Q.empty()) Q.pop();
Q.push(n);
dp[n]=0;
while(!Q.empty()){
int d=Q.front();
Q.pop();
if(d==k) {
ans=dp[d];
break;
}
else{
if(d+1<=MAXN-10&&dp[d+1]==-1){
dp[d+1]=dp[d]+1;
Q.push(d+1);
}
if(d-1>=0&&dp[d-1]==-1){
dp[d-1]=dp[d]+1;
Q.push(d-1);
}
if(d*2<=MAXN-10&&dp[d*2]==-1){
dp[d*2]=dp[d]+1;
Q.push(d*2);
}
}
}
cout<<ans<<endl;
return 0;
}