概述
这道题是道典型的宽搜问题,我们可以从它的数据量就可以看出深搜要超时,并且最短路要用宽搜。
#include<iostream>
#include<queue>
using namespace std;
queue<int>sm;//宽搜用队列
int d[200001]={0},start,end;//d[]代表走到当前点需要的最少步数
int search (){
sm.push(start);
for(int i=0;i<=200000;i++)d[i]=1001110;//初始化
d[start]=0;
while(sm.size()){
int p=sm.front();sm.pop();
if(p==end)break;
if((p-1)>=0&&d[p]+1<d[p-1]){//边界条件是0
d[p-1]=d[p]+1;
sm.push(p-1);
}
if(p<n&&d[p]+1<d[p+1]){//若小于n才能+1
d[p+1]=d[p]+1;
sm.push(p+1);
}
if(p<100001&&d[p]+1<d[2*p]){//小于n才能乘2
d[p*2]=d[p]+1;
sm.push(p*2);
}
}
return d[end];
}
int main(){
cin>>start>>end;
cout<<search();
}
转载于:https://www.cnblogs.com/c201904xyorz/p/9990778.html
最后
以上就是勤奋自行车为你收集整理的POJ-3278 Catch that cow的全部内容,希望文章能够帮你解决POJ-3278 Catch that cow所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复