整数变换问题-----回溯法

整数变换问题涉及f(i)=3i和g(i)=i/2两种变换,目标是用最少次数将n变换为m。这是一个3n+1问题的变形,通过逐步加深的回溯法在C++环境中寻找最短变换序列。算法包括从键盘获取n和m,初始化变换次数为1,然后递归地进行3*n和n/2的回溯搜索,直到找到解决方案或超过最大变换次数。时间复杂度为O(n!)。
摘要由CSDN通过智能技术生成

整数变换问题:关于整数i 的变换f 和g 定义如下:f(i)=3i;g(i)=i/2。 试设计一个算法,对于给定的2 个整数n 和m,用最少的f 和g 变换次数将n 变换为m。 例如,可以将整数15 用4 次变换将它变换为整数4:4=gfgg(15)。当整数n 不可能变换为整数m 时,算法应如何处理?


这是3n+1问题的变形。为了找最短变换序列,用逐步加深的回溯法搜索。

开发环境是vs2013,c++语言

算法步骤:
1、从键盘获取要变换的数n,要变换成的数m
2、将变换的次数k先设置为1,使用search(1,n)进行回溯搜索,如果搜索到了,则输出结果;否则,将k递增一次,继续执行search直到找到或者超过最大变换次数。
3、search(dep,n)递归回溯搜索,每次都进行3*n和n/2,并从这两分支不断延续两个分支下去,直到找到或者超出界限为止。
4、算法时间复杂度:因为是排序树,所以是O(n!)

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"iostream"
using namespace std;

static int n;//要变换的数
static int m;//要变换成的数
static int k;//变换的次数
static bool found;//查找结果
static int result[100];//最多变换100次

bool search(int dep, int n);
v
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值