题目描述:农夫约翰已被告知一头逃亡母牛的位置,并希望立即抓住她。他从数轴上的点N (0 ≤ N ≤ 100,000) 开始,而奶牛在同一数轴上的点K (0 ≤ K ≤ 100,000) 处。Farmer John 有两种交通方式:步行和传送。
1. 行走:FJ 可以在一分钟内从X点移动到X - 1 或X + 1点
2. 传送:FJ 可以在一分钟内从X点移动到 2 × X点。
假设母牛是不会动的,农夫约翰需要多长时间才能取回它?
输入:两个空格分隔的整数:N和K
输出:农夫约翰抓住逃亡母牛所需的最少时间(min)
使用算法:广度优先搜索,农夫只有三种方式来捉到母牛,一是一步一步往前移,每移动一步需要1min,二是往后一步一步移动,三是移动到当前位置的两倍处。显然在离母牛远时用第三种方式更快,一旦不小心过了母牛,就只能采用方式二退回来,时间必然不是最少的,所以先分两种情况,一种是农夫在母牛前面,那么农夫就只能后退,时间就是农夫的位置减去母牛的位置,另外一种则要采用广度优先搜索算法得出最优解。
广度优先搜索的实现方法:
1.设置一个队列Q,从队列的顶点开始,遍历该顶点后让其进队;
2.出队一个顶点元素,求该顶点的所有邻接点(对应于此题即FJ的三种走法)
3对于没有遍历过的邻接点遍历之&