zoukankan      html  css  js  c++  java
  • POJ3278——Catch That Cow(BFS)

    Catch That Cow

    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.

    题目大意:

        有个农夫在N点,有个牛在K点。农夫有三种移动方式:1)向前一步 2)向后一步 3)从当所在位置X瞬间移动到2*X点

        输出最少进行多少步,农夫能找到牛。(大坑是农夫和牛的活动范围在[0,100000])

    解题思路:

        bfs即可。注意农夫的可活动范围

    ps:HUD 2717与这个题一样,但是是多组输入输出,请注意!

    Code:

     1 #include<string>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<queue>
     5 #include<iostream>
     6 using namespace std;
     7 int dis[100005],vis[100005],N,K;
     8 queue<int> q;
     9 int bfs(int N,int K)
    10 {
    11     q.push(N);
    12     dis[N]=0,vis[N]=1;
    13     while (!q.empty())
    14     {
    15         int x[5],i;
    16         int front=q.front();
    17         q.pop();
    18         x[1]=front-1,x[2]=front+1,x[3]=front*2;
    19         for (i=1; i<=3; i++)
    20         {
    21             if (x[i]>=0&&x[i]<=100000&&!vis[x[i]])
    22             {
    23                 q.push(x[i]),vis[x[i]]=1,dis[x[i]]=dis[front]+1;
    24                 if (x[i]==K) return dis[x[i]];
    25             }
    26         }
    27     }
    28 }
    29 int main()
    30 {
    31     cin>>N>>K;
    32     if (N==K) cout<<0;
    33     else
    34         cout<<bfs(N,K);
    35     return 0;
    36 }
  • 相关阅读:
    Sql Sugar
    GoLang 环境部署
    Typora 自动添加序号
    C# 操作 Oracle批量执行Insert Blob
    C# 生成读取二维码
    Asp.net core 使用Serilog记录日志
    Asp.net Core 将日志输出到文件
    云原生领域的一些技术展望
    C# BeginInvoke用法记录
    C# 委托及线程
  • 原文地址:https://www.cnblogs.com/Enumz/p/3768282.html
Copyright © 2011-2022 走看看