Catch That Cow
Time Limit: 2000MSMemory Limit: 65536KB
ProblemDescription
Farmer John has been informedof the location of a fugitive cow and wants to catch her immediately. He startsat 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 oftransportation: walking and teleporting. * Walking: FJ can move from any pointX to the points X - 1 or X + 1 in a single minute * Teleporting: FJ can movefrom any point X to the point 2 × X in a single minute. If the cow, unaware ofits pursuit, does not move at all, how long does it take for Farmer John toretrieve it?
Input
Line 1: Two space-separatedintegers: N and K
Output
Line 1: The least amount oftime, in minutes, it takes for Farmer John to catch the fugitive cow.
ExampleInput
5 17
ExampleOutput
4
Hint
poj3278有链接提示的题目请先去链接处提交程序,AC后提交到SDUTOJ中,以便查询存档。
The fastest way for Farmer John to reach the fugitive cow is to move along thefollowing path: 5-10-9-18-17, which takes 4 minutes.
Author
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y,step;
}st;
int n,m,flag,book[200000];
int bfs()
{
queue<node>g;
memset(book,0,sizeof(book));
book[st.x] = 1;
g.push(st);
while(!g.empty())
{
node now = g.front();
g.pop();
if(now.x==m)
return now.step;
for(int j=0;j<3;j++)
{
node next;
if(j==0)
{
next.x = now.x+1;
}
else if(j==1)
{
next.x = now.x-1;
}
else if(j==2)
{
next.x = now.x*2;
}
next.step = now.step+1;
if(next.x==m)
{
return next.step;
}
if(next.x>=0&&next.x<=200000&&!book[next.x])
{
book[next.x] = 1;
g.push(next);
}
}
}
return 0 ;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
st.x = n;
st.step = 0;
printf("%d\n",bfs());
}
return 0;
}
/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 4ms
Take Memory: 944KB
Submit time: 2017-02-15 21:00:28
****************************************************/