zoukankan      html  css  js  c++  java
  • POJ 3278(bfs)

    Catch That Cow
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 31637   Accepted: 9740

    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 //注意下标不可变为-1,两个数组均要开到20w,为此吃了好几个re 
     2 //大致题意:n可以执行加一减一乘二,求至少几步到k 
     3 #include <iostream>
     4 #include <queue>
     5 #include <cstring>
     6 #include <cstdlib>
     7 using namespace std;
     8 const int N = 100000;
     9 int a[200005];
    10 queue <int > q;
    11 int vis[N*2+5];
    12 void bfs(int n,int k)
    13 {
    14     vis[n] = true;
    15     q.push(n);
    16     while(!q.empty())
    17     {
    18         int head = q.front();
    19         q.pop();
    20         if(head==k)
    21         {
    22             return ;
    23         }
    24         else
    25         {//原来没加大于0的条件,结果re 
    26             if(!vis[head-1]&&head<=N&&head>=1)//禁止下标变为-1 
    27             {
    28                 vis[head-1] = true;
    29                 a[head-1]+=a[head]+1;
    30                 q.push(head-1);
    31             }
    32             if(!vis[head+1]&&head<N&&head>=0)
    33             {
    34                 vis[head+1] = true;
    35                 a[head+1]+=a[head]+1;
    36                 q.push(head+1);
    37             }
    38             if(!vis[head*2]&&head<=50000&&head>=0)
    39             {
    40                 vis[head*2] = true;
    41                 a[head*2]+=a[head]+1;
    42                 q.push(head*2);
    43             }
    44         }
    45     }
    46 }   
    47 int main()
    48 {
    49     int n,k;
    50     cin>>n>>k;
    51     memset(vis,false,sizeof(vis));
    52     memset(a,0,sizeof(a));
    53     while(!q.empty())
    54         q.pop();
    55     bfs(n,k);
    56     if(n>=k)
    57         cout<<n-k<<endl;
    58     else
    59         cout<<a[k]<<endl;
    60     system("pause");
    61     return 0;
    62 }
  • 相关阅读:
    android高级页面效果集锦
    2018年Android的保活方案效果统计
    程序员如何预估自己的项目开发时间?
    Google开发者大会:你不得不知的Tensorflow小技巧
    练就Java24章真经—你所不知道的工厂方法
    一个完整Java Web项目背后的密码
    怎么捕获和记录SQL Server中发生的死锁
    使用跟踪标志位分析死锁
    通过SQL Server Profiler来监视分析死锁
    SQL Server中的死锁
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2647919.html
Copyright © 2011-2022 走看看