zoukankan      html  css  js  c++  java
  • 求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 }
     1 #include <iostream>
     2 #include <queue>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 int main() {
     7     int x, y;
     8     scanf("%d,%d", &x, &y);
     9     queue<pair<int, int> > q;
    10     pair<int, int> tmp({x, 0});
    11     q.push(tmp);
    12     
    13     while (!q.empty()) {
    14         tmp = q.front();
    15         q.pop();
    16         if (tmp.first == y) {
    17             cout << tmp.second << endl;
    18             break;
    19         } else {
    20             q.push({tmp.first + 1, tmp.second + 1});
    21             q.push({tmp.first - 1, tmp.second + 1});
    22             q.push({tmp.first * 2, tmp.second + 1});
    23         }
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7)
    [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
    [烧脑时刻]EL表达式1分钟完事
    Sublime2 破解教程
    全脑瘫IT时代(八)
    全脑瘫IT时代(九)
    迁移完成
    USB Debug Cable (一)
    一个不是很常见的.Net Interop问题
    全脑瘫IT时代(十二)
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11456996.html
Copyright © 2011-2022 走看看