林克的逃亡
林克计划败露企图逃跑,在数据世界中,林克逃跑只能使用步行或者传送,林克当前处于一个一维坐标系中某点x,每一秒钟他可以步行可以往前走一步即到达x+1,也可以往后走一步即达到x-1,或者使用传送,可以直接传送到2x的位置。林克的起始点为S,他必须跑到K点才能逃脱。例如林克目前在5,目标点在17,他可以先传送到达10,再往回走一步到达9,在传送到达18,最后再往回走一步达到17,这样5-10-9-18-17,只需要4秒钟。
输入格式:
只有一行包含两个整数S和K
输出格式:
输出一个整数,表示林克最快几秒钟可以达到K点。
限制:
0<=S<=100000
0<=K<=100000
样例 1 :
输入:
5 17
输出:
4
说明:
5-10-9-18-17,需要4秒钟。
附上代码(深搜版):
#include <bits/stdc++.h>
using namespace std;
int s,k,u[4],cnt=INT_MAX;
bool book[200005];
void dfs(int x,int step)
{
book[x]=1;
if(x==k)
{
cnt=min(cnt,step);
}
u[1]=x+1;
u[2]=x+2;
u[3]=2*x;
for(int i=1;i<=3;i++)
{
if(book[u[i]]==0&&u[i]>=0&&u[i]<=2*k)
{
dfs(u[i],step+1);
book[u[i]]=0;
}
}
}
int main()
{
cin>>s>>k;
dfs(s,0);
cout<<cnt;
return 0;
}