SDUToj 1028 Catch That Cow (BFS)

来源:互联网 发布:网络交换机品牌排行 编辑:程序博客网 时间:2024/05/21 19:21

Catch That Cow

Time Limit: 2000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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?

 

输入

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

输出

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

示例输入

5 17

示例输入

4


///ACcode 注意判断是否来过某个点(mp数组),是否超数据范围;防止tle,依次将各种情况入队,判断最短时间(步数);
#include <iostream>#include <cstring>#include <queue>#include <cstdio>using namespace std;bool mp[110000]= {0};struct node{    int place;    int time;} now,cmp;int flag(int x)///判断 是否越界{    if (x<0 || x>100000||mp[x]==1)    {        return 0;    }    return 1;}int bfs(int peo,int cow){    queue <node> q;///定义 放在bfs函数里面    now.place=peo;    now.time=0;    mp[now.place]=1;    q.push(now);    while (!q.empty())    {        cmp=q.front();        q.pop();        if (cmp.place==cow)        {            return cmp.time;        }        else        {            if (flag(cmp.place+1))///判断 是否走过此点            {                mp[cmp.place+1]=1;                now.place=cmp.place+1;                now.time=cmp.time+1;                q.push(now);            }            if (flag(cmp.place-1))            {                mp[cmp.place-1]=1;                now.place=cmp.place-1;                now.time=cmp.time+1;                q.push(now);            }            if (flag(cmp.place*2))            {                mp[cmp.place*2]=1;                now.place=cmp.place*2;                now.time=cmp.time+1;                q.push(now);            }        }    }    return -1;}int main(){    int n,k;    cin>>n>>k;    if (n > k)    {        cout<<n-k<<endl;///cow 比 peo的位置小,人只能每次走一步     }    else    {        cout<<bfs(n,k)<<endl;    }    return 0;}


1 0
原创粉丝点击