广搜.
#include <stdio.h>
#include <queue>
using namespace std;
#define MAX 100005
struct node {
int pos;
int step;
};
int n, k;
bool visited[MAX];
int bfs(int s) {
queue<node> Q;
node start, now, next;
memset(visited, false, sizeof(visited));
start.pos = s;
start.step = 0;
visited[s] = true;
Q.push(start);
while (!Q.empty()) {
now = Q.front();
Q.pop();
if (now.pos + 1 == k || now.pos - 1 == k || now.pos*2 == k) {
return now.step + 1;
}
if (now.pos*2 <= 100000 && !visited[now.pos*2]) {
next.pos = now.pos*2;
next.step = now.step + 1;
visited[next.pos] = true;
Q.push(next);
}
if (now.pos - 1 >= 0 && !visited[now.pos - 1]) {
next.pos = now.pos - 1;
next.step = now.step + 1;
visited[next.pos] = true;
Q.push(next);
}
if (now.pos + 1 <= 100000 && !visited[now.pos + 1]) {
next.pos = now.pos + 1;
next.step = now.step + 1;
visited[next.pos] = true;
Q.push(next);
}
}
return 0;
}
int main() {
int ans;
while (scanf("%d%d", &n, &k) != EOF) {
if (n == k) {
printf("0\n");
} else {
ans = bfs(n);
printf("%d\n", ans);
}
}
return 0;
}