POJ

来源:互联网 发布:tcp套接字编程java 编辑:程序博客网 时间:2024/05/21 17:13


 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 pointN (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 pointsX- 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 andK
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<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#define maxn 100002using namespace std;int n,m;struct data{int x,step;}p;int vis[100005];void bfs(){queue<data>q;p.x=n;p.step=0;q.push(p);vis[n]=1;while(!q.empty()){p=q.front();q.pop();if(p.x==m){printf("%d\n",p.step);return ;}data k=p;if(k.x+1<maxn&&!vis[k.x+1]){k.x++;vis[k.x]=1;k.step++;q.push(k);}k=p;if(k.x-1>=0&&!vis[k.x-1]){k.x--;vis[k.x]=1;k.step++;q.push(k);}k=p;if(k.x*2<maxn&&!vis[k.x*2]){k.x*=2;vis[k.x]=1;k.step++;q.push(k);}}}int main(){scanf("%d%d",&n,&m);memset(vis,0,sizeof(vis));bfs();return 0;}


原创粉丝点击