catch the cow 抓住小黄牛

来源:互联网 发布:淘宝3c证书编号查询 编辑:程序博客网 时间:2024/05/02 02:28

/*

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?


*/

//java

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class catch_cow {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n,k;
Queue<Node> queue;
while(in.hasNext()){
n=in.nextInt();
k=in.nextInt();
queue=new LinkedList<Node>();
int walk=0;
queue.offer(new Node(n, 0));
while(!queue.isEmpty()){
Node node=queue.poll();
int x=node.x;
int step=node.step+1;
if(x+1==k||x-1==k||x*2==k){
walk=step;
break;
}
if(x*2>=0&&x*2<=100000){
queue.offer(new Node(x*2, step));
}
if((x-1)>=0&&(x-1)<=100000){
queue.offer(new Node(x-1, step));
}
if((x+1)>=0&&(x+1)<=100000){
queue.offer(new Node(x+1, step));
}
}
System.out.println(walk);
}
}
}
class Node{
int x=0;
int step=0;
public Node(int x,int step){
this.x=x;
this.step=step;
}
}
0 0