【题目描述】
给出a和b,a通过操作
+1;
-1;
*2;
至少几步能够到达b。
【解题思路】
首先要想到用bfs
要点1:有个搜索上界就是b*2;
要点2:对访问过的点要标记,避免重复搜索。
struct my
{
int x, ans;
} wo;
int flag[1000005];
int main()
{
int a, b;
while (scanf("%d%d", &a, &b) == 2) {
queue<my> q;
memset(flag, 0, sizeof(flag));
my x;
x.x = a;
x.ans = 0;
q.push(x);
flag[a] = 1;
while (1) {
my t = q.front();
q.pop();
if (t.x == b) {
printf("%d\n", t.ans);
while (!q.empty()) q.pop();
break;
}
my tt;
tt.x = t.x + 1;
tt.ans = t.ans + 1;
if (flag[tt.x] == 0) {
flag[tt.x] = 1;
q.push(tt);
}
tt.x = t.x - 1;
tt.ans = t.ans + 1;
if (flag[tt.x] == 0) {
flag[tt.x] = 1;
q.push(tt);
}
tt.x = t.x * 2;
tt.ans = t.ans + 1;
if (tt.x < b * 2 && flag[tt.x] == 0) {
flag[tt.x] = 1;
q.push(tt);
}
}
}
return 0;
}