【NOJ1541】【算法实验三】【BFS_分支限界】加1乘2平方

这是一道关于算法优化的题目,描述了如何使用BFS(广度优先搜索)和分支限界法从正整数m通过加1、乘2和平方变化达到正整数n的最少步数。文章中作者分享了代码优化的心得,通过创建init、change和isTarget三个函数实现了模块化,减少了重复代码,并提到听纯音乐能提升编程效率。
摘要由CSDN通过智能技术生成

1541.加1乘2平方

时限:1000ms 内存限制:10000K  总时限:3000ms

描述

给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次

输入

输入两个10000以内的正整数m和n,且m小于n

输出

输出从m变化到n的最少次数


#include <iostream>
#include <queue>

using namespace std;

int m,n;

int step[10000];    //记录到达每个数字所用的步数

int used[10000];    //节点判重

queue <int> q1;

void init();

int bfs();

int change(int now, int i); //对元素now做三种操作,返回操作后的值

bool isTarget(int now, int next);   //判断next是否到达目标?
                                    //到达目标返回true
                                    //未到达目标,将next入队,返回false

int main()
{
    while(cin>>m>>n)
    {
        init();
        cout<<bfs()<<endl;
    }
    return 0;
}

void init()
{
    for(int i=0; i<n; i++)  //初始化步数数组、判重数组
    {
        step[i]=used[i]=0;
    }

    while
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值