POJ

来源:互联网 发布:java 的io重要吗 编辑:程序博客网 时间:2024/06/05 10:39

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
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.
一个人在x处,通过x-1,x+1,x*2的方式最后到达k处。

#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int N=100000;int step[N];/*设置一个队列,让顶点进队,求出三种走法到达的位置,将新位置进队,更新队首,重复求出三种新的位置,直至到达k。*/int bfs(int n,int k){    queue<int> q;    q.push(n);    while(!q.empty())    {        int point=q.front();//取队首        q.pop();//弹出队列        if(point==k)//到达k处        {            return step[point];        }        if(point-1>=0&&!step[point-1])//符合要求且没有访问过        {            q.push(point-1);            step[point-1]=step[point]+1;        }        if(point+1<=N&&!step[point+1])        {            q.push(point+1);            step[point+1]=step[point]+1;        }        if(point*2<=N&&!step[point*2])        {            q.push(point*2);            step[point*2]=step[point]+1;        }    }    return 0;}int main(){    int n,k;    while(scanf("%d%d",&n,&k)==2)    {        memset(step,0,sizeof(step));        if(n>=k)//这是只能通过n-1到达k        {            printf("%d\n",n-k);        }        else        {            printf("%d\n",bfs(n,k));        }    }    return 0;}
原创粉丝点击