1 //标准bfs
2 #include <iostream>
3 #include <cstdio>
4 #include <algorithm>
5 #include <cmath>
6 #include <queue>
7
8 using namespace std;
9
10 int dir[3] = { 1, -1 };
11
12 struct node
13 {
14 int x, step;
15 } s, ss;
16
17 int bfs(int n, int k)
18 {
19 queue<node>q, qq;
20 s.x = n;
21 s.step = 0;
22 int vis[100010] = { 0 };
23 q.push(s);
24 while (!q.empty())
25 {
26 s = q.front();
27 q.pop();
28 if (s.x == k)
29 return s.step;
30 for (int i = 0; i < 2; i++)
31 {
32 ss.x = s.x + dir[i];
33 ss.step = s.step + 1;
34 if (ss.x >= 0 && ss.x <= 100000)
35 if (!vis[ss.x])
36 {
37 vis[ss.x] = 1;
38 q.push(ss);
39 }
40 }
41 ss.x = s.x * 2;
42 ss.step = s.step + 1;
43 if (ss.x >= 0 && ss.x <= 100000)
44 {
45 if (!vis[ss.x])
46 {
47 vis[ss.x] = 1;
48 q.push(ss);
49 }
50 }
51 }
52 return 0;
53 }
54
55 int main()
56 {
57 int n, k;
58 while (~scanf("%d%d", &n, &k))
59 {
60 printf("%d\n", bfs(n, k));
61 }
62 return 0;
63 }