您的位置:首页 > 其它

poj3278 - Catch That Cow

2012-04-14 13:51 393 查看
                                    
想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410

                                     转载请注明出处:http://blog.csdn.net/wangjian8006

 

题目大意:

            输入两个数n,k两个数,问从n到k最少经过多少步,对于一个数x有三种走法,x-1,x+2,2*x
代码:
#include <iostream>
#include <queue>
using namespace std;
#define MAXV 200000

int key[MAXV];
bool dis[MAXV];

int bfs(int first,int last){
int v;
queue <int>q;

memset(dis,false,sizeof(dis));
memset(key,0,sizeof(key));

q.push(first);
key[first]=0;
dis[first]=true;

while(!q.empty()){
v=q.front();
q.pop();

if(v==last) return key[v];

if((v-1)>=0 && (v-1)<MAXV && !dis[v-1]) {key[v-1]=key[v]+1;dis[v-1]=true;q.push(v-1);}
if((v+1)>=0 && (v+1)<MAXV && !dis[v+1]) {key[v+1]=key[v]+1;dis[v+1]=true;q.push(v+1);}
if((v*2)>=0 && (v*2)<MAXV && !dis[2*v]) {key[v*2]=key[v]+1;dis[v*2]=true;q.push(v*2);}
}
}

int main(){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF){
printf("%d\n",bfs(n,k));
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: