• POJ 3278 Catch That Cow


    Catch That Cow
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 30924   Accepted: 9536

    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 /* 功能Function Description:     POJ 3278 Catch That Cow
     2    开发环境Environment:          DEV C++ 4.9.9.1
     3    技术特点Technique:
     4    版本Version:
     5    作者Author:                    可笑痴狂
     6    日期Date:                      20120730
     7    备注Notes:                     深搜---队列
     8 */
     9 #include<iostream>
    10 #include<queue>
    11 #define MAX 100001
    12 using namespace std;
    13 
    14 queue<int> q;
    15 bool visit[MAX];
    16 int step[MAX];       //记录步数的数组不能少
    17 
    18 bool bound(int num)
    19 {
    20     if(num<0||num>100000)
    21         return true;
    22     return false;
    23 }
    24 
    25 int BFS(int st,int end)
    26 {
    27     queue<int> q;
    28     int t,temp;
    29     q.push(st);
    30     visit[st]=true;
    31     while(!q.empty())
    32     {
    33         t=q.front();
    34         q.pop();
    35         for(int i=0;i<3;++i) //三个方向搜索 
    36         {
    37             if(i==0)
    38                 temp=t+1;
    39             else if(i==1)
    40                 temp=t-1;
    41             else
    42                 temp=t*2;
    43             if(bound(temp))         //越界
    44                 continue;
    45             if(!visit[temp])
    46             {
    47                 step[temp]=step[t]+1;
    48                 if(temp==end)
    49                     return step[temp];
    50                 visit[temp]=true;
    51                 q.push(temp);
    52             }
    53         }
    54     }
    55 }
    56 
    57 int main()
    58 {
    59     int st,end;
    60     while(scanf("%d%d",&st,&end)!=EOF)
    61     {
    62         memset(visit,false,sizeof(visit));
    63         if(st>=end)
    64             cout<<st-end<<endl;
    65         else
    66             cout<<BFS(st,end)<<endl;
    67     }
    68     return 0;
    69 }
    功不成,身已退
  • 相关阅读:
    java网络编程(UDP详解)
    java网络编程(TCP详解)
    java-单例详解
    java-接口和抽象类的联系和区别。
    java-集合小结
    Java异常(一)Java异常简介及其框架
    JAVA的接口
    深入理解Java的接口和抽象类
    linux动态库编译和使用详细剖析
    C基础 time.h 简单思路扩展
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2614556.html
Copyright © 2020-2023  润新知