• bfs hdu 2717 Catch That Cow


    Catch That Cow

    Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 14553    Accepted Submission(s): 4422


    Problem 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
    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.
     
     1 #include<iostream>
     2 #include<queue>
     3 #include<string.h>
     4 
     5 using namespace std;
     6 
     7 int k;
     8 int vis[100005];
     9 struct node
    10 {
    11     int data;
    12     int step;
    13 };
    14 node n;
    15 int bfs()
    16 {
    17     queue<node>que;
    18     que.push(n);
    19     while(!que.empty())
    20     {
    21         node p = que.front();
    22         que.pop();
    23         vis[p.data]=1;
    24         if(p.data==k)
    25         {
    26             return p.step;
    27         }
    28         node q = p;
    29         q.step++;
    30         
    31         q.data = p.data*2;
    32         if(q.data>=0 && q.data<=100000 && !vis[q.data])
    33             que.push(q);
    34         q.data=p.data-1;
    35         if(q.data>=0 && q.data<=100000 && !vis[q.data])
    36             que.push(q);
    37         q.data=p.data+1;
    38         if(q.data>=0 && q.data<=100000 && !vis[q.data])
    39             que.push(q);
    40         
    41     }
    42     return -1;
    43 }
    44 int main()
    45 {
    46     while(cin>>n.data>>k)
    47     {
    48         memset(vis,0,sizeof(vis));
    49         cout<<bfs()<<endl;
    50     }
    51     
    52     
    53     return 0;
    54 }
  • 相关阅读:
    Android_Spinner_example
    23.pyspider安装
    22.Windows及linux下gerapy使用
    21.scrapy爬虫部署
    12.利用kakatips对网站数据信息监控
    11.启信宝数据二次筛选解密(字符串的分割与拼接及正则匹配)-2
    10.Ubuntu操作系统及python2.7、3.5 exe
    9.数据库多表一起查询
    8.代理ip使用
    7.阿布云代理服务器试用
  • 原文地址:https://www.cnblogs.com/Xycdada/p/6749331.html
Copyright © 2020-2023  润新知