这是个分情况的递归啊!!!
#include<bits/stdc++.h>
using namespace std;
int dfs(int x,int y) //弱弱的问一句这是dfs吗?^o^
{
if(x>=y) //这是递归终止条件如果农夫在牛的右面的时候,
return x-y; //农夫只能一步一步向左走(其他的走法都没有意义)
if(x==0)
return dfs(1,y); //如果农夫在0位置,向左走和传送都是没有意义的,只能向右走一步,再进行接下来的操作
if(y%2==0) //当牛的位置为偶数时
{
if(x<y/2) //如果农夫的位置(大小)比牛的一半还要小,此时最少时间为走到牛的一半位置再传送一次
return dfs(x,y/2)+1;
else
return min(dfs(x,y/2)+1,y-x); //否则最小时间为上述方法和只往右走的最小值
}
else //如果牛的位置为奇数时则比较农夫分别走到牛的左面和右面的最小时间,最后再加1
{
return min(dfs(x,y-1),dfs(x,y+1))+1;
}
}
int main()
{
int n,k;
cin>>n>>k;
int time=dfs(n,k);
cout<<time<<endl;
return 0;
}
/***************************************************
User name: ACM18171信科1801张林
Result: Accepted
Take time: 0ms
Take Memory: 200KB
Submit time: 2019-01-05 14:57:52
****************************************************/