快手2019年春季校园招聘笔试试题--工程B试卷 1.求x到y的最少计算次数 (BFS)

时间限制:1秒

空间限制:262144K

给定两个-100到100的整数x和y,对x只能进行加1,减1,乘2操作,问最少对x进行几次操作能得到y?
例如:
a=3,b=11: 可以通过3*2*2-1,3次操作得到11;
a=5,b=8:可以通过(5-1)*2,2次操作得到8;


输入描述:
输入以英文逗号分隔的两个数字,数字均在32位整数范围内。

输出描述:
输出一个数字

输入例子1:
3,11

输出例子1:
3

思路:广度优先搜索。(队列实现)

 1 #include <iostream>
 2 #include <queue>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 int main() {
 7     int x, y;
 8     int cnt = 0;
 9     bool flag = false;
10     scanf("%d,%d", &x, &y);
11     queue<int> q;
12     q.push(x);
13     while (!q.empty()) {
14         int len = q.size();
15         for (int i = 0; i < len; i++) {
16             int tmp = q.front();
17             q.pop();
18             if (tmp == y) {
19                 flag = true; 
20                 break;
21             } else {
22                 q.push(tmp + 1);
23                 q.push(tmp - 1);
24                 q.push(tmp * 2);
25             }
26         }
27         if (flag)
28             break;
29         cnt++;
30     }
31     cout << cnt << endl;
32     return 0;
33 }

猜你喜欢

转载自www.cnblogs.com/qinduanyinghua/p/11456996.html
BFS