简单的bfs
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <string>
#include <cstdlib>
using namespace std;
const int maxn=1000001;
bool visited[maxn];
struct dola{
int x;
int steps;
dola(int x_,int steps_):x(x_),steps(steps_){};
};
int main(){
int N;
cin>>N;
while(N--){
memset(visited,0,sizeof(visited));
int begin,end;
queue<dola> q;
cin>>begin>>end;
visited[begin]=1;
q.push(dola(begin,0));
while(!q.empty()){
dola temp=q.front();
if(temp.x==end){
cout<<2*temp.steps<<endl;
break;
}
if(temp.x-1>=0 && !visited[temp.x-1] ){
q.push(dola(temp.x-1,temp.steps+1));
visited[temp.x-1]=1;
}
if(temp.x+1<=maxn && !visited[temp.x+1] ){
q.push(dola(temp.x+1,temp.steps+1));
visited[temp.x+1]=1;
}
if(temp.x*2<=maxn && !visited[temp.x*2] ){
q.push(dola(temp.x*2,temp.steps+1));
visited[temp.x*2]=1;
}
if(temp.x%2==0 && temp.x/2>=0 && !visited[temp.x/2]){
q.push(dola(temp.x/2,temp.steps+1));
visited[temp.x/2]=1;
}
q.pop();
}
while(!q.empty()){
q.pop();
}
}
return 0;
}