joshua分享:用队列实现,相当于是BFS搜索,只有三条分支路。

求x到y的最少计算次数

http://www.nowcoder.com/questionTerminal/45d04d4d047c48768543eeec95798ed6

    // 遍历该层的三个节点,分别为+1, -1, *2
    // 加入待选节点前,先进行判断是否合法
#include <bits/stdc++.h>
using namespace std;

int main(void) {
    int level = -1, size = 0;
    int a, b;
    queue<int> q;

    // 这个地方为啥用cin输入就不对了?卡了我一个晚上啊!
    scanf("%d,%d", &a, &b);

    q.push(a);
    while(!q.empty()) {
        size = q.size();
        level++;
        // 遍历该层的三个节点,分别为+1, -1, *2
        // 加入待选节点前,先进行判断是否合法
        for(int i = 0; i < size; i++) {
            int t = q.front(); q.pop();
            // 满足要求即可退出
            if(t == b) {
                while(!q.empty()) q.pop();
                break;
            }
            // 三种待选方案
            if(t+1 <= 100) q.push(t+1);
            if(t-1 >= -100) q.push(t-1);
            if(2*t <= 200 && 2*t >= -200) q.push(2*t);
        }
    }
    cout << level << endl;
    return 0;
}
全部评论
cin>>a>>c>>b;这样写
1 回复 分享
发布于 2020-05-10 18:43
而且 最后应该是2*t<=100 && 2*t>=-100
点赞 回复 分享
发布于 2020-05-10 18:45

相关推荐

不敢追175女神:换成北京市民应该好很多😋
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务