## 题目描述
FJ 丢失了他的一头牛,他决定追回他的牛。已知 FJ 和牛在一条直线上,初始位置分别为 x 和 y,假定牛在原地不动。FJ 的行走方式很特别:他每一次可以前进一步、后退一步或者直接走到 2x 的位置。计算他至少需要几步追上他的牛。
## 输入格式
第一行为一个整数 t (1 <= t <= 10),表示数据组数;
接下来每行包含一个两个正整数 x,y (0<x,y <= 10^5),分别表示 FJ 和牛的坐标。
## 输出格式
对于每组数据,输出最少步数。
## 样例 #1
### 样例输入 #1
```
1
5 17
```
### 样例输出 #1
```
4
```
dfs的思想是"不撞南墙不回头",这是一道典型的bfs题,运用dfs会无限递归,所以需要剪枝和限制(自己造一个"南墙")
先看代码
#include <bits/stdc++.h>
using namespace std;
int ans;
//dfs+剪枝
void dfs(int x,int y,int sum)
{
if(sum >= ans) return;//可行性剪枝
ans = min(ans,sum + abs(y-x));//二段维护
if(x == y)
{
ans = min(ans,sum);
return;
}
else if(x > y)
{
dfs(x,y+1,sum+1);
}
else
{
if(y % 2 == 0)
{
dfs(x,y >> 1,sum + 1);
}
else
{
dfs(x,y-1,sum+1);
dfs(x,y+1,sum+1);
}
}
}
int main()
{
int x