汉罗塔非递归_汉诺塔递归原理

汉罗塔非递归_汉诺塔递归原理/*汉诺塔递归和非递归算法实现*/#includeusingnamespacestd;typedefstructTower{intheight;chara,b,c;}Tower;typedefstructNode{Towerelement;Node*pNext;}Node,*LinkList;typedefstruct

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

/*汉诺塔递归和非递归算法实现*/
#include <iostream>
using namespace std;
typedef struct Tower{
    int height;
    char a,b,c;
}Tower;
typedef struct Node{
    Tower element;
    Node* pNext;
}Node,*LinkList;
typedef struct  
{
    LinkList Top;
}Stack;
void InitStack(Stack& stack)
{
    stack.Top=(LinkList)malloc(sizeof(Node));
    stack.Top->pNext=NULL;
}
void DestroyStack(Stack& stack)
{
    free(stack.Top);
    stack.Top=NULL;
}
void Push(Stack& stack,int height,char a,char b,char c)
{
    LinkList temp=(LinkList)malloc(sizeof(Node));
    temp->element.height=height;
    temp->element.a=a;
    temp->element.b=b;
    temp->element.c=c;
    temp->pNext=stack.Top->pNext;
    stack.Top->pNext=temp;
}
Tower Pop(Stack& stack)
{
    LinkList temp=stack.Top->pNext;
    stack.Top->pNext=temp->pNext;
    Tower element=temp->element;
    free(temp);
    return element;
}
int EmptyStack(Stack stack)
{
    if (stack.Top->pNext==NULL)
    {
        return 1;
    } 
    else
    {
        return 0;
    }
}
void main()
{
    
    Stack stack;
    InitStack(stack);
    Push(stack,10,'A','B','C');
    while (!EmptyStack(stack))
    {
        Tower temp=Pop(stack);
        if (temp.height==1)
        {
            cout<<temp.a<<"-->"<<temp.c<<endl;
        }
        else
        {
            Push(stack,temp.height-1,temp.b,temp.a,temp.c);
            Push(stack,1,temp.a,temp.b,temp.c);
            Push(stack,temp.height-1,temp.a,temp.c,temp.b);
        }
    }
    DestroyStack(stack);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UML活动图

    UML活动图面向对象的软件开发方法的第一步:业务建模<–使用活动图转载:https://www.cnblogs.com/xiaolongbao-lzh/p/4591953.html活动图概述•活动图和交互图是UML中对系统动态方面建模的两种主要形式•交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流•活动图是一种表述过程基理、业务过程以及工作流的技术。它可以用…

    2022年6月14日
    23
  • 视觉slam和激光slam结合_视觉slam和激光slam

    视觉slam和激光slam结合_视觉slam和激光slam激光SLAM:早在2005年的时候,激光SLAM就已经被研究的比较透彻,框架也已初步确定。激光SLAM,是目前最稳定、最主流的定位导航方法。激光SLAM地图构建VSLAM(基于视觉的定位与建图):随着计算机视觉的迅速发展,视觉SLAM因为信息量大,适用范围广等优点受到广泛关注。视觉SLAM地图构建,图片来源:百度AI(1)基于深度摄像机的Vslam,跟…

    2022年8月23日
    7
  • Codelf插件的使用

    Codelf插件的使用当你找到这个插件的时候说明你已经知道了这个插件的作用,这里只说关于变量名和star的使用。1、去应用商店下载安装插件2、直接使用http://unbug.github.io/codelf/变量名:输入一个中文名字,会给出一大堆建议的英文变量名(比如说”产品”,突然英文名字忘了,就可以如下操作)你可能会说,我直接百度翻译、有道翻译不就OK了吗?但是”产品”只是个常见的单词,”产品资源”、”气质

    2022年6月4日
    99
  • 赤池信息准则AIC,BIC「建议收藏」

    赤池信息准则AIC,BIC「建议收藏」很多参数估计问题均采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时带来一个机器学习中非常普遍的问题——过拟合。所以,模型选择问题在模型复杂度与模型对数据集描述能力(即似然函数)之间寻求最佳平衡。人们提出许多信息准则,通过加入模型复杂度的惩罚项来避免过拟合问题,此处我们介绍一下常用的两个模型选择方法——赤池信息准则(AkaikeInfo…

    2022年5月16日
    44
  • 彻底搞懂0-1背包问题(动态规划)

    彻底搞懂0-1背包问题(动态规划)看了很多网上的博客,发现对于0-1背包问题很多讲的都很专业,初学者学起来还是比较吃力,今天我就用最简单最形象的语言来描述一下0-1背包问题,为什么不能用贪婪算法,而要选择使用动态规划。首先对于0-1背包问题,我们需要知道的是:每一个物品只有1个,要么全拿,要么不拿,最后使得拿到的物品的总价值最大。假如一个小偷有一个可以容纳4千克的背包,但是发现面前只有有3样物品可以偷:台灯(30元,4千克)、音响(20元,3千克)、充电宝(15元,1千克)(价格和重量可能有点奇怪????)。问,小偷能够偷到的物品的

    2022年7月26日
    8
  • mini usb接口图片_linux查看接口速率

    mini usb接口图片_linux查看接口速率华硕X450V笔记本更换intelAX200无线网卡@TOC下面内容以更换AX200为主要内容,还涉及无线网卡接口(minipcie和m.2/ngff),网线,路由器,无线网卡天线,AX200驱动(包括刷Killer驱动的问题,不建议刷!!!,没什么卵用)等与网卡性能相关的内容。目前使用情况是:有5G爽,信号强,连接速度高,稳定不掉线,网速快,有蓝牙爽歪歪。笔记本是2013年买的,老款了。换了三星860EVO500G,光驱改放机械,内存加了4G,成8G双通道,电池换了一次,又要换了。现在5Gw

    2022年9月8日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号