码迷,mamicode.com
首页 > 其他好文 > 详细

x变成y的最少操作次数(层次遍历)

时间:2019-04-15 00:44:12      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:数字   evel   pac   clu   hellip   子节点   ret   简单   nod   

输入x,y,x为源数字,y为目标值。输出x变成y的最少操作次数。

x每次可以执行三种操作:-1 、 +1 、 x2;

如 x=5,y=8:5-1=4,4x2=8;所以输出结果为2(次操作)。

可以发现用树形结构保存,并用层次遍历的方式找最简单。

技术图片

层次遍历的实现就是通过队列,循环的将队列front的节点从队列中拿出来,将其儿子节点放入队列后……

#include <iostream>
#include <queue>
using namespace std;
struct node{
    int num; //数值
    int level; //层数
    node(int x,int y):num(x),level(y){}
};

int f(int a,int b){
    if(a==b)    return 0;
    queue<node> q;
    node aa(a,0);
    q.push(aa);
    while(!q.empty()){
        node top = q.front();
        q.pop();
        if(top.num == b)
            return top.level;
        q.push(node(top.num-1,top.level+1));
        q.push(node(top.num+1,top.level+1));
        q.push(node(top.num*2,top.level+1));
    }
    return -1;
}
int main(){
    int a,b;
    cin>>a>>b;
    cout<<f(a,b)<<endl;
}

 

x变成y的最少操作次数(层次遍历)

标签:数字   evel   pac   clu   hellip   子节点   ret   简单   nod   

原文地址:https://www.cnblogs.com/whalelife/p/10708325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!