• poj 3278


    Description

    Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

    * Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
    * Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

    If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

    Input

    Line 1: Two space-separated integers: N and K

    Output

    Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

    Sample Input

    5 17

    Sample Output

    4
    简单bfs
    #include<iostream>
    #include<queue>
    using namespace std;
    struct Node
    {
        int x,t;//当前的坐标 当前的时间
    };
    int v[1100111];
    void bfs(int x,int y)
    {
        Node now,next;
        now.x=x;now.t=0;
        queue<Node>q;
        q.push(now);
        while(!q.empty())
        {
            now=q.front();q.pop();
            if(now.x==y)
                break;
            //共需3种要处理两种状态
            next.x=now.x*2;//1 倍增
            next.t=now.t+1;// 
            if(next.x>=0&&next.x<=1100100&&next.t<v[next.x])
            {
                v[next.x]=next.t;
                q.push(next);
            }
    
            next.x=now.x+1;
            next.t=now.t+1;//2 向右走
            if(next.x>=0&&next.x<=1100100&&next.t<v[next.x])
            {
                v[next.x]=next.t;
                q.push(next);
            }
    
            next.x=now.x-1;
            next.t=now.t+1;//3 向左走
        if(next.x>=0&&next.x<=1100100&&next.t<v[next.x])
            {
                v[next.x]=next.t;
                q.push(next);
            }
        
        }
        cout<<now.t<<endl;
    }
    int main()
    {
        int x,y;
    
           while(cin>>x>>y)
           {
               if(x>=y)//如果x>y  那么只能向后走
                   cout<<x-y<<endl;
               else
               {
           
           for(int i=1;i<=1100100;i++)//方便状态转移
               v[i]=999999999;
            bfs(x,y);
               }
           }
           
        
        return 0;
    }
  • 相关阅读:
    关于dreamweaver的软件测评
    对于软件工程存在的疑问
    沈阳航空软件工程附加
    个人总结
    软件工程-构建之法 团队
    黄金点游戏
    第三周作业2
    第三周作业1
    作业2
    作业1
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/4422970.html
Copyright © 2020-2023  润新知