POJ 3278 Catch That Cow

来源:互联网 发布:matlab交易程序源码 编辑:程序博客网 时间:2024/05/12 08:32

Description

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a pointN (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 orX + 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 andK

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

Hint

The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.

这题直接BFS没跑,写的DFS t了,代码如下:

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef structqnode
{
    int n,s;
    qnode(int nn=0,int ss=0):n(nn),s(ss){}
}qnode;
int k,Min;
bool r[100005]={false};
void BFS(int n)
{ qnode t;
    queue<qnode> q;
    q.push(qnode(n,0));
    r[n]=true;
    while(!q.empty())
    {
        t=q.front(),q.pop();
        if(t.n==k)
        {
            Min=t.s;
            return;
        }
        if((t.n+1<=100000)&&!r[t.n+1])
        {
            r[t.n+1]=true;
            q.push(qnode(t.n+1,t.s+1));
        }
        if((t.n*2<=100000)&&!r[t.n*2])
        {
            r[t.n*2]=true;
            q.push(qnode(t.n*2,t.s+1));
        }
        if(t.n-1>0&&!r[t.n-1])
        {
            r[t.n-1]=true;
            q.push(qnode(t.n-1,t.s+1));
        }
    }
}
int main()
{
    int n;
    cin>>n>>k;
    if(k<=n){Min=n-k;}
    else BFS(n);
    cout<<Min<<endl;
    return 0;
}

0 0
原创粉丝点击