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 }
  • 相关阅读:
    一致性网络设备命名——linux 网络接口 命名 p1p1 em1
    施一公
    硬盘安装Fedora20出错
    电影里的黑客为何都不用鼠标
    Windows8下硬盘安装Fedora17——可能会遇到的问题
    linux mutt详解
    Red Hat Enterprise Linux 7.0 Beta —— document
    UNIX、Linux、Solaris、Windows到底谁更好?
    Windows与UNIX/Linux之比较
    Windows打败了Unix,但Linux是打不倒的!
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11456996.html
Copyright © 2011-2022 走看看