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[100000]; int main() { int n,k; scanf("%d%d",&n,&k); Node u; u.x = n; u.step = 0; queue<Node> q; q.push(u); while(!q.empty()) { u = q.front(); q.pop(); if(u.x==k) { printf("%d ",u.step); break; } Node x=u,y=u,z=u; x.x --; x.step ++; if(x.x>=0&&!vis[x.x]) { vis[x.x] = true; q.push(x); } y.x ++; y.step ++; if(y.x<=100000&&!vis[y.x]) { vis[y.x] = true; q.push(y); } z.x = z.x*2; z.step ++; if(z.x<=100000&&!vis[z.x]) { vis[z.x] = true; q.push(z); } } return 0; }