【算法与数据结构】汉诺塔
数据结构里的汉诺塔,递归的典型代表,几乎讲到递归都会讲到汉诺塔,今天才把汉诺塔看明白,惭愧啊。
不废话了,贴代码,基本思想在注释里有,话说往CNBLOG首页投了两次,两次都被小编给扯下来了,这次就不投了。
1 // Hanoi.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include <iostream>
6 using namespace std;
7
8 /************************************************************************/
9 /* 三根柱子x, y, z, n个盘子,从小到大依次编号为1--n,所有盘子现在都在
10 x柱子上,现在需要从x柱子移动到z柱子
11 如果n==1则问题很简单,只需要将盘子从x柱子移动到z柱子,
12 否则,需要将上面n-1个盘子从x柱子借助z柱子移动到y柱子,然后将盘子n从x柱子
13 移动到z柱子,再将y柱子上的n-1个盘子从y柱子借助x柱子移动到z柱子
14
15 /************************************************************************/
16 void Move(int n, int a, int b)
17 {
18 cout<<"\r\n----------- "<<"将盘子 "<<n<<" 从柱子 "<<a<<" 移动到柱子 "<<b<<endl;
19 }
20
21 //将n个盘子从x借助y移动到z
22 void Hanoi(int n, int x, int y, int z)
23 {
24 //如果只有一个盘子,将此盘子从x直接移动到z
25 if (1 == n)
26 {
27 Move(1, x, z);
28 }
29 else
30 {
31 //将上面的n-1个盘子从x借助z移动到y
32 Hanoi(n - 1, x, z, y);
33
34 //将盘子n从x直接移动到z
35 Move(n, x, z);
36
37 //将y上的n-1个盘子从y借助x移动到z
38 Hanoi(n - 1, y, x, z);
39 }
40 }
41
42 int _tmain(int argc, _TCHAR* argv[])
43 {
44 Hanoi(5, 1, 2, 3);
45
46 return 0;
47 }
知道为什么Hanoi盘子个数给了4个吗? 因为给3个显得太少,给5个嘛,就显示不全啦!
**********************技术交流请 email:cuihao0532#163.com 欢迎转载,转载请注明出处!***************************** 如果对本文满意请扫描文章左侧【二维码添加微信】获取更多好玩、有趣、有益、有营养的料,
你我共同成长!Y(^_^)Y
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗