【题目描述】
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000)N(0≤N≤100000),牛位于点K(0≤K≤100000)K(0≤K≤100000)。农夫有两种移动方式:
1、从XX移动到X−1X−1或X+1X+1,每次移动花费一分钟
2、从X移动到2×X2×X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
【输入】
两个整数,NN和KK。
【输出】
一个整数,农夫抓到牛所要花费的最小分钟数。
【输入样例】
5 17
【输出样例】
4
#include<iostream>
using namespace std;
int n, k, que[10001][2], t, a[1001] = { 0 };
int main()
{
cin >> n >> k;
if (n == k)
{
cout << 0 << endl; return 0;
}
int head = 0, tail = 1;
que[1][0] = n; que[1][1] = 0;//que[*][0]记录位置!que[*][1]用来计算步数!
a[n] = 1;//记录经没经过!!!
int x;
while (head < tail)
{
head++;
x = que[head][0];
for (int i = 1; i <= 3; i++)
{
if (i == 1) t = x + 1;
if (i == 2) t = x - 1;
if (i == 3) t = x * 2;
if (t >= 0 && t <= 100000 && a[t] == 0)
{
tail++;
que[tail][0] = t;
a[t] = 1;
que[tail][1] = que[head][1] + 1;//步数=上一步加一;
if (t == k)
{
cout << que[tail][1]; return 0;
}
}
}
}
}
版权声明:本文为weixin_45988242原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。