http://tjuacm.chaosheng.top/problem.php?id=1269

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

const int N = 100010;

int n, k;
bool vis[N];

struct pos{
    int x;
    int step;
};

void bfs(){
    queue<pos> q;
    pos f;
    f.x = n;
    f.step = 0;
    q.push(f);
    vis[f.x] = true;

    while(q.size()){
        f = q.front();
        q.pop();

        //满足条件
        if(f.x == k){
            printf("%d\n", f.step);
            return ;
        }
        pos v;
        for(int i = 0; i < 3; i++){
            if(i == 0){
                v.x = f.x - 1;
            }else if(i == 1){
                v.x = f.x + 1;
            }else{
                v.x = f.x * 2;
            }
            if(v.x >= 0 && v.x < N && !vis[v.x]){
                vis[v.x] = true;
                v.step = f.step + 1;
                q.push(v);
            }
        }        
    }
}

int main(){
    while(cin >> n >> k){
        memset(vis, false, sizeof(vis));
        bfs();
    }
    return 0;
}