zoukankan      html  css  js  c++  java
  • POJ

    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.

    思路:BFS判断注意把vis数组开大点,不然容易WA,

    代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    using namespace std;
    int N,K;
    int vis[500005];
    struct node 
    {
    	int x,y;
    	int step;
    }start;
    queue <node> q;
    int bfs()
    {
    	while(!q.empty())
    	{
    		q.pop();
    	}
    	memset(vis,0,sizeof(vis));
    	
    	vis[start.x]=1;
    	q.push(start);
    	while(!q.empty())
    	{
    		node now=q.front();
    		if(now.x==K)
    		{
    			return now.step;
    		}
    		q.pop();
    		for(int t=0;t<3;t++)
    		{
    			node next = now;
    			if(t==0)
    			{
    			   next.x=next.x+1;	
    			}
    			if(t==1)
    			{
    				next.x=next.x-1;
    			}
    			if(t==2)
    			{
    				next.x=2*next.x;
    			}
    			next.step++;
    			if(next.x==K)
    			{
    				return next.step;
    			}
    			if(next.x>=0&&next.x<=200000&&!vis[next.x])
    			{
    				vis[next.x]=1;
    				q.push(next);
    			}
    		}
    	}
    	return 0;
    	
    }
    
    int main()
    {
    	cin>>N>>K;
    	start.x=N;
    	start.step=0;
    	printf("%d
    ",bfs());	
        
    	return 0;
    }
  • 相关阅读:
    SoapUI 使用笔记
    git 使用笔记(二)
    git 使用笔记(一)
    jquery 拓展
    hdu 1024 Max Sum Plus Plus (DP)
    hdu 2602 Bone Collector (01背包)
    hdu 1688 Sightseeing (最短路径)
    hdu 3191 How Many Paths Are There (次短路径数)
    hdu 2722 Here We Go(relians) Again (最短路径)
    hdu 1596 find the safest road (最短路径)
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781846.html
Copyright © 2011-2022 走看看