您的位置:首页 > 其它

POJ_3278_ Catch That Cow _广搜

2016-03-05 11:57 330 查看
/*

B - Catch That Cow

Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u

Submit Status

Description

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?

Input

Line 1: Two space-separated integers: N and K

Output

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

Sample Input

5 17

Sample Output

4

*/

#include <stdio.h>
#include <string.h>
#include <queue>
#define Max 200005
int used[Max];
using namespace std;
struct Node
{
int n;
int num;
};
int main()
{
int N,K;
while(scanf("%d%d",&N,&K)!=EOF)
{
memset(used,0,sizeof(used));
queue<Node>Q;
Node start;
start.n = N;
start.num = 0;
Q.push(start);
while(!Q.empty())
{
start = Q.front();
Q.pop();

int a,b;
a = start.n;
b = start.num;

if(a==K)
{
break;
}
if(a<K && !used[a*2])
{
used[a*2] = 1;
start.n = a * 2;
start.num = b + 1 ;
Q.push(start);
}
if(a>0 &&!used[a-1])
{
used[a-1] = 1;
start.n = a - 1;
start.num = b + 1 ;
Q.push(start);
}
if(a<K && !used[a+1])
{
used[a+1] = 1;
start.n = a + 1;
start.num = b + 1 ;
Q.push(start);
}
}
printf("%d\n",start.num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: