zoukankan      html  css  js  c++  java
  • poj 3278:Catch That Cow(简单一维广搜)

    Catch That Cow
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 45648   Accepted: 14310

    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 - 1 or + 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.

    Source

     
      简单一维广搜
      题意
      你在一个一维坐标的n位置,牛在k位置,你要从n到k,抓到那头牛。你可以有三种走法,n+1,n-1,或者n*2直接跳。求你抓到那头牛的最短步数。
      思路
      简单广搜的思想。状态跳转的时候有三种跳转的方式,将新的状态放到队列中,再不断提取队列中最前面的状态,直到找到k位置。
      代码
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <queue>
     5 using namespace std;
     6 
     7 bool isw[100010];
     8 
     9 struct Node{
    10     int x;
    11     int s;
    12 };
    13 
    14 bool judge(int x)
    15 {
    16     if(x<0 || x>100000)
    17         return true;
    18     if(isw[x])
    19         return true;
    20     return false;
    21 }
    22 
    23 int bfs(int sta,int end)
    24 {
    25     queue <Node> q;
    26     Node cur,next;
    27     cur.x = sta;
    28     cur.s = 0;
    29     isw[cur.x] = true;
    30     q.push(cur);
    31     while(!q.empty()){
    32         cur = q.front();
    33         q.pop();
    34         if(cur.x==end)
    35             return cur.s;
    36         //前后一个个走
    37         int nx;
    38         nx = cur.x+1;
    39         if(!judge(nx)){
    40             next.x = nx;
    41             next.s = cur.s + 1;
    42             isw[next.x] = true;
    43             q.push(next);
    44         }
    45         nx = cur.x-1;
    46         if(!judge(nx)){
    47             next.x = nx;
    48             next.s = cur.s + 1;
    49             isw[next.x] = true;
    50             q.push(next);
    51         }
    52         //向前跳
    53         nx = cur.x*2;
    54         if(!judge(nx)){
    55             next.x = nx;
    56             next.s = cur.s + 1;
    57             isw[next.x] = true;
    58             q.push(next);
    59         }
    60     }
    61     return 0;
    62 }
    63 
    64 
    65 int main()
    66 {
    67     int n,k;
    68     while(scanf("%d%d",&n,&k)!=EOF){
    69         memset(isw,0,sizeof(isw));
    70         int step = bfs(n,k);
    71         printf("%d
    ",step);
    72     }
    73     return 0;
    74 }

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    转 linux shell自定义函数(定义、返回值、变量作用域)介绍
    转 Shell调试篇
    WIN2012的桌面和开始菜单跑到什么地方去了
    转 awr自动收集脚本
    Troubleshooting Guide for ORA-12541 TNS: No Listener
    test
    向Linus学习,让代码具有good taste
    php 页面展示
    c++ list sort
    c++ word类型
  • 原文地址:https://www.cnblogs.com/yym2013/p/3860180.html
Copyright © 2011-2022 走看看