zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Codeforces 787D. Legacy 线段树优化建图+最短路
    Codeforces 1051E. Vasya and Big Integers
    BZOJ3261 最大异或和
    BZOJ3531 SDOI2014 旅行
    洛谷P2468 SDOI 2010 粟粟的书架
    2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
    HDU6280 From Tree to Graph
    HDU5985 Lucky Coins 概率dp
    (HDU)1334 -- Perfect Cubes (完美立方)
    (HDU)1330 -- Deck (覆盖物)
  • 原文地址:https://www.cnblogs.com/Xycdada/p/6749331.html
Copyright © 2011-2022 走看看