1253:抓住那头牛(数轴上的问题)

【题目描述】
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点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
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;
				}
			}
		}
	}
}

你可能感兴趣的:(1253:抓住那头牛(数轴上的问题))