不要过于沉溺过去,也不要过于畅想未来,把握现在!

西北工业大学2012级算法机试题 1417.Catch That Cow

<pre class="cpp" name="code"><span style="color:#333399;">/*
1417.Catch That Cow
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
一个农夫的牛丢了,现在要把牛找回来。
假设农夫和牛都在X轴上,牛不会动,农夫有两种移动方式。
步行:假设农夫当前位置是X,那么他可以走到X-1或X+1。
传送:假设农夫当前位置是X,那么他可以传送到2*X。(话说为何会传送还要做农夫)
无论那种方法,一次移动都需要花费一分钟的时间。
现在给你农夫和牛的初试坐标,请你输出农夫最快需要花多长时间可以找到牛。


输入
只有一行,包括两个整数N和K,分别表示农夫和牛的初试位置。

输出
输出一个整数,表示农夫最少要花多少分钟才能够找到牛。

输入样例
5 17


输出样例
4


By Yuan.c
2014.6.23
其实这个题非常简单,就是一个反向的深搜,只是当时考试的时候没有反应过来,真的是很遗憾
*/
#include<iostream>
#include<stdio.h>
using namespace std;
int x,y;
int mark[1000000];
int sum[1000000];
int a[1000000];
int sta=0,end=0,res=0;
void solve()
{int m;
    while(1){
      if(a[sta]==x){
         res=sum[sta];
         break;}

    m=a[sta]+1;
    if(mark[m]==0){
       sum[++end]=sum[sta]+1;
       mark[m]=1;
       a[end]=m;
       }

       m=a[sta]-1;
    if(mark[m]==0){
       sum[++end]=sum[sta]+1;
       mark[m]=1;
       a[end]=m;
       }
     m=a[sta];
       if(m%2==0){m=a[sta]/2;
    if(mark[m]==0){
       sum[++end]=sum[sta]+1;
       mark[m]=1;
       a[end]=m;
       }}
       sta++;}
}


int main()
{

    cin>>x>>y;
    sum[0]=0;
    a[0]=y;
    solve();
    cout<<res<<endl;
    return 0;
}
</span>

 



posted @ 2014-06-24 12:59  coding_yuan  阅读(180)  评论(0编辑  收藏  举报

不要过于沉溺过去,也不要过于畅想未来,把握现在!