P - Catch That Cow

P - Catch That Cow
Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
Submit  Status

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 - 1 or + 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

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.


也是搜索,3个方向,+1,-1,*2;

#include<stdio.h>
#include<queue>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct stu
{
    int x,step;
} s;
int n,k,a[100010];
int bfs(stu z)
{
    z.step=0;
    queue<stu>q;
    q.push(z);
    stu t;
    while(1)
    {
        z=q.front();
          q.pop();
        int i;
        if(z.x==k)
            return z.step;
        else
        {
            for(i=0; i<3; i++)
            {
                if(!i)  t.x=z.x*2;
                else if(i==1)  t.x=z.x+1;
                else if(i==2)  t.x=z.x-1;
                if(t.x>=0&&t.x<=100000&&!a[t.x])
                {
                    a[t.x]=1;
                    t.step=z.step+1;
                    q.push(t);
                }
            }
        }
    }
}
int main()
{
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        memset(a,0,sizeof(a));
        s.x=n;
        s.step=0;
        printf("%d\n",bfs(s));
    }
}

你可能感兴趣的:(队列,广搜)