Catch That Cow
题目描述
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting. * Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute * Teleporting: FJ can move from any point X to the point 2 × X in a single minute. If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
输入
Line 1: Two space-separated integers: N and K
输出
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
示例输入
5 17
示例输出
4
#include <iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<malloc.h> #include<stack> #include<queue> using namespace std; int map[1000010]; struct node { int x,step; }; int check(int x) { if(x<100001&&x>=0&&map[x]==0) return 1; return 0; } int n,m; int bfs(int x) { struct node a,b; queue<node>p; a.x=x; a.step=0; map[x]=1; p.push(a); while(!p.empty()) { a=p.front(); p.pop(); if(a.x==m) return a.step; b=a; b.x=a.x+1; if(check(b.x)) { b.step=a.step+1; map[b.x]=1; p.push(b); } b.x=a.x-1; if(check(b.x)) { b.step=a.step+1; map[b.x]=1; p.push(b); } b.x=a.x*2; if(check(b.x)) { b.step=a.step+1; map[b.x]=1; p.push(b); } } return 0; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { memset(map,0,sizeof(map)); cout<<bfs(n)<<endl; } }