catch the cow 抓住小黄牛

/*

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值