poj--3278--Catch That Cow(bfs)

来源:互联网 发布:fuse cc是什么软件 编辑:程序博客网 时间:2024/09/21 06:20
Catch That Cow
Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 67914 Accepted: 21397

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 - 1 or + 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

Hint

The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.


#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;#define MAXN 1000000+10int vis[MAXN];int ans,n,k;struct node{int x,step;}p,temp;int check(int x){if(x<0||x>=MAXN||vis[x])return 0;return 1;}int bfs(){queue<node>q;p.step=0;vis[n]=1;p.x=n;while(!q.empty()) q.pop();q.push(p);while(!q.empty()){p=q.front();q.pop();temp=p;if(p.x==k)return p.step;temp.x=p.x+1;if(check(temp.x)){vis[temp.x]=1;temp.step=p.step+1;q.push(temp);}temp.x=p.x-1;if(check(temp.x)){vis[temp.x]=1;temp.step=p.step+1;q.push(temp);}temp.x=p.x*2;if(check(temp.x)){vis[temp.x]=1;temp.step=p.step+1;q.push(temp);}}return -1;}int main(){while(scanf("%d%d",&n,&k)!=EOF){memset(vis,0,sizeof(vis));ans=bfs();printf("%d\n",ans);}return 0;}


0 0