您的位置:首页 > 其它

2016春季练习——搜索

2016-07-06 19:29 423 查看
这个春学期的最后啦

来源: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
=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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: