2971:抓住那头牛
- 总时间限制:
- 2000ms
- 内存限制:
- 65536kB
- 描述
-
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛? - 输入
- 两个整数,N和K
- 输出
- 一个整数,农夫抓到牛所要花费的最小分钟数
- 样例输入
-
5 17
- 样例输出
-
4
BFS也要记得标记!!!
#include <bits/stdc++.h>
using namespace std; struct Node {
int x;
int step;
}; bool vis[]; int main()
{
int n,k;
scanf("%d%d",&n,&k);
Node u;
u.x = n;
u.step = ;
queue<Node> q;
q.push(u);
while(!q.empty()) {
u = q.front();
q.pop();
if(u.x==k) {
printf("%d\n",u.step);
break;
}
Node x=u,y=u,z=u;
x.x --;
x.step ++; if(x.x>=&&!vis[x.x]) {
vis[x.x] = true;
q.push(x);
} y.x ++;
y.step ++; if(y.x<=&&!vis[y.x]) {
vis[y.x] = true;
q.push(y);
} z.x = z.x*;
z.step ++;
if(z.x<=&&!vis[z.x]) {
vis[z.x] = true;
q.push(z);
}
} return ;
}