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

                                                              Catch That Cow
    Time Limit: 2000MS   Memory Limit: 65536K
    Total Submissions: 114140   Accepted: 35715

    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

     
    终于A掉这道题,BFS新认知。
     
    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<vector>
    #include<cmath>
    #include<cstring>
    #include<string> 
    
    #define N 100010
    
    using namespace std;
    
    void in(int &x){
        register char c=getchar();x=0;int f=1;
        while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
        while(isdigit(c)){x=x*10+c-'0';c=getchar();}
        x*=f;
    }
    
    int a,b,ans;
    struct Step{
    	int v,w;//位置,步数 
    	Step(int xx,int s):v(xx),w(s){ }
    };
    bool vis[N];
    queue<Step>Q;
    
    void BFS(){
    	memset(vis,0,sizeof(vis));
    	vis[a]=1;Q.push(Step(a,0));
    	while(!Q.empty()){
    		Step s=Q.front();Q.pop();
    		if(s.v==b) {
    			ans=s.w;break;
    		}
    		else {
    			if(s.v-1>=0 && !vis[s.v-1]){
    				Q.push(Step(s.v-1,s.w+1));
    				vis[s.v-1]=1;
    			}if(s.v+1<=N &&!vis[s.v+1]){
    				Q.push(Step(s.v+1,s.w+1));
    				vis[s.v+1]=1;
    			}if(s.v*2<=N && !vis[s.v*2]){
    				Q.push(Step(s.v*2,s.w+1));
    				vis[s.v*2]=1;
    			}
    		}
    	}
    }
    
    int main()
    {
    	in(a);in(b);
    	BFS();
    	printf("%d
    ",ans);
    	return 0;
    }
    

      

  • 相关阅读:
    itk_interior
    itk_option define
    scrolled canvas tcl tk
    init.rc的disabled含义
    WIFI分析与移植
    ubuntu10.04命令挂载windows硬盘与U盘
    Android WIFI 分析
    Android WIFI 分析
    Android平台开发WIFI function portingWIFI功能移植
    Android平台开发WIFI function portingWIFI功能移植
  • 原文地址:https://www.cnblogs.com/song-/p/9263277.html
Copyright © 2011-2022 走看看