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
Output
Sample Input
5 17
Sample Output
4
Hint
题意:
就是给出a和b点的横坐标,求到a,b的最小行动次数,其中每次行动只能是下面两种情况之一
向左或向右移动一步,即横坐标加1或者减1
横坐标变成原来的两倍
思路:
运用广度搜索, 优先搜到的一定是时间最小的!
细节:
注意当n==0的情况是,要进行特殊处理
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int dfs(int c,int t)
{
if(c>=t)
return c-t;
if(t%2==0)
{
if(c<t/2)
return dfs(c,t/2)+1;
else if(c==t/2)
return 1;
else
return min(1+c-t/2,t-c);
}
else
{
return min(dfs(c,t+1),dfs(c,t-1))+1;
}
}
int main()
{
int flag=0;
cin>>n>>m;
if(n==0)
flag=1;
cout<<dfs(n+flag,m)+flag<<endl;
return 0;
}
渣渣。。。