农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
借鉴了下别人的思路写出的代码 代码:
#include<iostream>
using namespace std;
int n, k, shu[100001][20], t, a[10001] ;
int main() {
cin >> n >> k;
if (n == k) {
cout << 0 << endl;//自投罗网
return 0;
}
int l = 0, r = 1;
shu[1][0] = n;
shu[1][1] = 0;
a[n] = 1;
int x;
while (l < r) {//给二分以搜索 而不是给搜索以二分
l++;
x = shu[l][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 <= 100001 && a[t] == 0) {//重点
r++;
shu[r][0] = t;
a[t] = 1;
shu[r][1] = shu[l][1] + 1;
if (t == k) {
cout << shu[r][1];
exit(0);
}
}
}
}
return 0;
}