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;
}
来源: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;
}
相关文章推荐
- Collection,List,Set,Map的区别
- 秒懂java中junit单元测试
- Hibernate Validator
- windows--nginx关闭进程
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- HTML&CSS学习笔记
- 安卓APP动态调试-IDA实用攻略
- Drawable:button,listView
- 全缓存、行缓存和无缓存
- 人体的组成
- Java+利用UDP实现简单双机通信
- C#之WCF
- Eclipse工程导入,找不到工程问题
- 初识gcc编译过程
- 双链表的C语言实现
- 并发编程学习总结(八) :java中synchronized关键字使用详解 对象锁的相关条件的使用(2)
- C++20、友元类
- 欢迎使用CSDN-markdown编辑器
- 如何将格式为byte[]的图片保存在本地
- 循环链表的C语言实现