汉诺塔问题--C语言实现

news/2024/12/30 0:49:44/

在这里插入图片描述

  • 魔王的介绍:😶‍🌫️一名双非本科大一小白。
  • 魔王的目标:🤯努力赶上周围卷王的脚步。
  • 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥
    在这里插入图片描述
    ❤️‍🔥大魔王与你分享:对我说过“别走好吗”只有体育老师而已。

文章目录

  • 一、前言
  • 二、思路
  • 三、代码实现
  • 四、总结

一、前言

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

二、思路

这是一个经典的递归问题,学递归的时候一般都会引入这个问题。
我们先自己想出圆盘数为1、2、3时的情况:
1个的话:直接从a移动到c
2个的话,我们需要需要借助b柱,第一步:将上面的移动到b柱,第二部:将下面的移动到c柱,第三步:再让b柱上那个借助a柱移动到c柱,也就是需要三步。
3个的话,这个的递归思想就比较容易发现了,首先将上面的两个(也就是n-1个)看作一个整体,就相当于上面的2个圆盘的情况了,(对应着上面的理解)不过这个的第一步和第三步都是移动的两个圆盘,所以不能直接移动,又把两个的分为一个加一个,如下图请添加图片描述

更多的话类比就ok,都是一样的。

三、代码实现

//汉诺塔
#include <stdio.h>void move(char a, char c)
{printf("%c->%c\n", a, c);
}
void Hanoi(int n,char a,char b,char c)
{if (n == 1)  //如果递归拆解到n=1,那么就直接从原位置移动到目标位置。move(a, c);else  //如果n>1,还是要继续递归,因为一次只能移动一个圆盘,而且也要符合要求(小的在大的上面){Hanoi(n - 1,a,c,b);  //将n-1个移动到辅助位置move(a, c);  //将最后一个移动到目标位置Hanoi(n - 1, b, a, c);  //将移动到辅助位置的这些再移动到目标位置}
}
int main()
{int n = 0;scanf("%d", &n);Hanoi(n,'A','B','C');return 0;
}

四、总结

在这里插入图片描述

✨请点击下面进入主页关注大魔王
如果感觉对你有用的话,就点我进入主页关注我吧!


http://www.ppmy.cn/news/48588.html

相关文章

【Linux】基于单例模式懒汉实现方式的线程池

目录 一、LockGuard.hpp 二、Task.hpp 三、Thread.hpp 四、ThreadPool.hpp 一、LockGuard.hpp #pragma once #include <iostream> #include <pthread.h> class Mutex//锁的对象 { public:Mutex(pthread_mutex_t* lock_pnullptr):_lock_p(lock_p){}~Mutex(){}v…

光栅和矢量图像处理SDK:Graphics Mill 11.7Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松地向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG PSD 和其他 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像处理 使用任何维度…

【虚幻引擎UE】UE4/UE5 新人科普向

一、前言 Unreal Engine是当前最为流行的游戏引擎之一&#xff0c;具有丰富的游戏开发功能和强大的游戏引擎渲染能力。 二、基础 UE5官方文档&#xff1a;UE5官方文档非常详细&#xff0c;介绍了UE5的各个功能和应用&#xff0c;适合入门学习和深入探究。链接&#xff1a;htt…

用于测试FDIA在现实约束下可行性的FDIA建模框架(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 信息通信技术的发展和智能设备的引入使电力系统逐渐演变为电力信息物理系统&#xff0c;而信息层与物理层之间的深度耦合也加剧…

Netty:常见的面试题和答案

1. 什么是Netty&#xff1f; 答&#xff1a;Netty是一个高性能的网络编程框架&#xff0c;基于NIO的非阻塞式IO模型&#xff0c;可以帮助开发者快速开发高性能、高可靠性的网络应用程序。 2. Netty的核心组件有哪些&#xff1f; 答&#xff1a;Netty的核心组件包括&#xff…

变压器绕制

变压器同名端 1、变压器同名端&#xff0c;是指在变压器绕制的时候&#xff0c;各绕组方向统一&#xff0c;同名端同时都为进线&#xff08;起始端&#xff09; 或出线&#xff08;结束端)。若某一个绕组骨架插入夹头方向反向&#xff0c;则相应该绕组进出线同时反向。同名端&a…

基于Simulink单载波链路射频波束成形仿真

一、前言 此示例展示了如何在 Simulink中对 IEEE 802.11ad单载波链路进行建模&#xff0c;其中包括具有射频波束成形功能的相控阵天线。 二、介绍 此模型模拟具有射频波束成形的 802.11ad 单载波 &#xff08;SC&#xff09;链路。多个数据包通过自由空间传输&#xff0c;然后射…

少儿编程 电子学会图形化编程等级考试Scratch二级真题解析(选择题)2022年9月

2022年9月scratch编程等级考试二级真题 选择题(共25题,每题2分,共50分) 1、数列:1,2,3,4,6,9,13,19,28,...的下一项是多少 A、37 B、39 C、41 D、47 答案:C 考点分析:考查观察能力和逻辑推理能力,从前面数字可以观察到一些规律: 第4个数字,是由前面…