zoukankan      html  css  js  c++  java
  • poj3278 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 - 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
    这题可以用宽搜,但要注意剪枝,否则队列会爆。
    #include<stdio.h>
    #include<string.h>
    int n,m,x2,x1;
    int q[11111111],b[200005];
    void bfs()
    {
    	int i,j,front=1,rear=1,x,xx;
    	memset(q,0,sizeof(q));memset(b,0,sizeof(b));
    	b[x1]=0;
    	q[front]=x1;
    	while(front<=rear){
    		x=q[front];
    		if(x==x2)break;
    		front++;
    			if(x+1<=100000 && b[x+1]==0){
    				rear++;q[rear]=x+1;b[x+1]=b[x]+1;
    			}
    			if(2*x<=200000 && b[2*x]==0){
    				rear++;q[rear]=2*x;b[2*x]=b[x]+1;
    			}
    			if(x>=1 && b[x-1]==0  ){
    				rear++;q[rear]=x-1;b[x-1]=b[x]+1;
    			}
    			//
    		}
    	return;
    }
    
    
    int main()
    {
    	int i,j;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    		x1=n;x2=m;
    		bfs();
    		printf("%d
    ",b[x2]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    java中finally的使用
    String基本方法
    java文件读写常用方法
    java笔试面试(转载)
    单链表的反转
    单链表的冒泡排序
    Java快速教程
    Java快速教程
    后海日记(4)
    后海日记(3)
  • 原文地址:https://www.cnblogs.com/herumw/p/9464819.html
Copyright © 2011-2022 走看看