zoukankan      html  css  js  c++  java
  • 【BFS】【HDOJ-2717】Catch That Cow

    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
     
    思路:
    当n>=k的时候只能后退一步 所以就是n-k
    n<k的时候有三种 +1 -1 *2 BFS
     
    参考代码
     1 #include <stdio.h>
     2 #include <string.h>
     3 int bfs(int n,int k);
     4 #define LEN 100001
     5 int step[LEN]={0};
     6 int mark[LEN]={0};
     7 int main()
     8 {
     9     int n,k;
    10     while(scanf("%d%d",&n,&k)!=EOF)
    11     {
    12         if(n>=k)
    13             printf("%d
    ",n-k);
    14         else
    15             printf("%d
    ",bfs(n,k));
    16     }
    17     return 0;
    18 }
    19 
    20 int bfs(int n,int k)
    21 {
    22     memset(step,0,sizeof(step));
    23     memset(mark,0,sizeof(mark));
    24     int queue[LEN];
    25     int i,front=0,rear=1;
    26     queue[0]=n;
    27     mark[queue[0]]=1;
    28     while(front<rear)
    29     {
    30         for(i=0;i<3;i++)
    31         {
    32             if(queue[front]-1>=0&&!mark[queue[front]-1])
    33             {
    34                 mark[queue[front]-1]=1;
    35                 step[queue[front]-1]=step[queue[front]]+1;
    36                 queue[rear++]=queue[front]-1;
    37                 if(queue[rear-1]==k)
    38                     return  step[queue[front]-1];
    39             }
    40             if(queue[front]+1<=LEN&&!mark[queue[front]+1])
    41             {
    42                 mark[queue[front]+1]=1;
    43                 step[queue[front]+1]=step[queue[front]]+1;
    44                 queue[rear++]=queue[front]+1;
    45                 if(queue[rear-1]==k)
    46                     return step[queue[front]+1];
    47             }
    48             if(queue[front]*2<=LEN&&!mark[queue[front]*2])
    49             {
    50                 mark[queue[front]*2]=1;
    51                 step[queue[front]*2]=step[queue[front]]+1;
    52                 queue[rear++]=2*queue[front];
    53                 if(queue[rear-1]==k)
    54                     return step[queue[front]*2];
    55             }
    56         }
    57         front++;
    58     }
    59 }
  • 相关阅读:
    CSP-S全国模拟赛第三场 【nan死了】
    ●SCOI2018 AFO
    ●洛谷P2934 [USACO09JAN]安全出行Safe Travel
    ●洛谷P3233 [HNOI2014]世界树
    ●洛谷P2495 [SDOI2011]消耗战
    ●UOJ58 [WC2013]糖果公园
    ●洛谷P1903 [国家集训队]数颜色
    ●BZOJ 4237 稻草人
    ●Joyoi Normal
    ●CodeForces 698C LRU
  • 原文地址:https://www.cnblogs.com/ahu-shu/p/3521529.html
Copyright © 2011-2022 走看看