汉诺塔问题_哔哩哔哩_bilibili

三柱汉诺塔,从整体来看,分为三部

1.先让n-1个盘先由a柱放在b柱

2.把第n个盘由a柱放在c柱

3.将这n-1个盘由b柱移动到c柱

而其中的递归过程就是直到这n-1个盘变成一个了并且放到了c盘,那递归就可以结束了。

我们可以用节点来考虑这个问题,如图所示

其中对于c节点那里,理解起来就是:

先让n-1个盘子从x柱移动到z柱子,其中我们借助了z柱子(肯定要借助,不然整体也过不去)

然后第n个盘子可以直接过去。最后n-1个盘子借助x柱子从y柱子移动到了z柱子。这是简单的三柱汉诺塔问题。题解如下:

#include<iostream>
#include<algorithm>
int a[30];
int ans,n;
using namespace std;
int hannuo3(int n)
{if (n == 1){ans++;}else {hannuo3(n - 1);ans++;hannuo3(n - 1);//这三部就相当于是节点的左中右节点的实现}
return ans;
}
int main()
{cin >> n;cout<<hannuo3(n);return 0;
}

这是简单求n个盘子移过去最小要多少步骤,如果要是显示出每个盘子都经历什么移动步骤,可修改代码如下:

#include<iostream>
#include<algorithm>
int a[30];
int ans, n;
using namespace std;
int hannuo3(int n, char x, char y, char z)
{if (n == 1){ans++;printf("%d from %c柱 to %c柱\n", n, x, z);}else {hannuo3(n - 1, x, z, y);ans++;printf("%d from %c柱 to %c柱\n", n, x, z);hannuo3(n - 1, y, x, z);}return ans;
}
int main()
{cin >> n;cout<<hannuo3(n, 'x', 'y', 'z');return 0;
}

此时有了这个基础,汉诺四塔的问题可以开始写。

算法思想:
用如下算法移动盘子(记为FourPegsHanoi):
1)、将A柱上n个盘子划分为上下两部分,下方部分共有k(1≤k≤n)个盘子,上方部分共有n - k个盘子。
2)、将A柱上面部分n–k个盘子经过C、D柱移至B柱。
3)、将A柱剩余的k个盘子经过C柱移至D柱。
4)、将B柱上的n–k个盘子经过A、C柱移至D柱。

也就是说第二步第四步我们使用汉诺四塔算法,而第二步我们使用汉诺三塔即可。

#include <iostream>
using namespace std;
int hannuo3(int n, char a, char b, char c) //a->c b做中间柱子
{if (n == 1){return 1;}int now = 0;now += hannuo3(n - 1, a, c, b);printf("%c->%c\n",a,c);now++;now += hannuo3(n - 1, b, a, c);return now;
}int hannuo4(int n, char a, char b, char c, char d)
{if (n == 1){printf("%c->%c\n",a,d);return 1;}int minans = 100000;for (int k = 1; k < n; k++){int ans = 0;ans += hannuo4(n - k, a, c, d, b); //n-k指的是上面那部分,k值得是下面部分 ans += hannuo3(k, a, c, d);ans += hannuo4(n - k, b, a, c, d);minans = ans;}return minans;
}int main() {int n;cin >> n;cout << hannuo4(n, 'A', 'B', 'C', 'D') << endl;return 0;
}

四柱汉诺塔由此实现。

三柱汉诺塔四柱汉诺塔相关推荐

  1. 四柱八字大全 php,四柱八字查询表 免费四柱八字查询

    我们每个人都有生辰八字,而且我们的生辰八字是独一无二的,而生辰八字当中有蕴含着我们的命运,这也导致了世界上只有一个你,你的命运是只属于你自己的,没有人与你拥有同样的命运. 天干三字口诀: 三甲天上贵, ...

  2. 四柱农历php,免费四柱八字排盘详解 免费算农历一生命运

    每个人出生都会有自己的农历生日和阳历生日,然而生活中我们算命都是用的农历生日,我们常根据农历生日来算自己的一生的命运,那么农历生日几月比较好呢?现在有很多免费算命的平台,那么关于免费四柱八字排盘详解, ...

  3. 四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼

    我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子. 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸.先来看看经典的三柱汉诺塔. 一.三柱汉诺塔(Hanoi_Thr ...

  4. 汉诺塔问题(含四柱加强版)

    参考:四柱加强版汉诺塔HanoiTower 1. 经典汉诺塔 思路分析:首先分析三根柱子的汉诺塔:将第i-1个盘子从a柱通过三根柱子移动到b柱,然后将最大的移动到c柱,最后又将i−1个盘子通过三根柱子 ...

  5. 四柱汉诺塔 -- 动态规划求解最优移动次数

    自己用Java写了一个前台进行四柱汉诺塔的移动演示,是按照最优次序进行移动的,链接里有详细的代码实现:https://download.csdn.net/download/qq_40285036/10 ...

  6. 汉诺塔II|汉诺塔4柱

    汉诺塔II|汉诺塔4柱 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根 ...

  7. Strange Towers of Hanoi 汉诺塔问题及其升级(递推)四个汉诺塔问题

    今天学习递推的汉诺塔问题,非常的有趣 文章目录 1.汉诺塔问题来源 分析 2.Strange Towers of Hanoi[DP][递推] 题目大意: 思考 解题步骤: 1.汉诺塔问题来源 汉诺塔( ...

  8. 算法之路(四)----汉诺塔(又称河内之塔)

    汉诺塔是很简单也很经典的算法之一. 汉诺塔是根据一个传说形成的数学问题: 有三根杆子A,B,C .A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: * ...

  9. 四柱子汉诺塔—递归—递推

    三塔:递推式:d[n] = 2 * d[n-1] + 1 即把前n-1个盘子从A柱移到B柱,然后把A柱上剩的那一个盘子移动到C柱,最后把B柱上的那n-1个盘子移动到C柱上 四塔:递推式:f[n] = ...

最新文章

  1. R语言基于Boruta进行机器学习特征筛选(Feature Selection)
  2. Spring Boot Profile
  3. 献给写作者的 Markdown 新手指南
  4. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
  5. 春天遇见Apache Hadoop
  6. HCL安装和使用模拟器中遇到的问题
  7. How to Install apk to Android Devices from Mac OS X
  8. Linux文本文件与Windows下的格式转换
  9. 建模步骤_带你十个步骤学建模(二)
  10. wxpython和tkinter哪个好_为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?...
  11. Android实现断点下载功能
  12. pulseaudio如何开通系统日志来debug
  13. 四六级、考研英语单词记忆---知米背单词APP推荐!
  14. Cron expression must consist of 6 fields
  15. 2020-11-30 网络爬虫
  16. 网桥(生成树网桥和源路由网桥)
  17. 维基解密披露CIA Grasshopper远程木马套件 Windows预安装环境、Carberp财务恶意软件的计算机驻留方法都用上了...
  18. 凯乐科技量子计算机,量子计算机仍是梦想,但量子通信的时代已经到来 原理 昨天 量子计算机仍然是一个梦...
  19. Jenkins+Gitlab+SonarQube 代码质量管理集成
  20. 竖线分割c语言循环获取数据,用c语言对这样一段话进行解码,每一个竖线是一个分段...

热门文章

  1. 三进制状压动态规划【涂抹果酱】 题解
  2. DUSKTREE SYSTEM
  3. pytorch学习十 ---- 优化器
  4. sqlcommand连接并更新SQLServer数据库小实例
  5. IDEA太强悍了!Java把一个文件复制到另一个文件
  6. 在openSUSE-Leap-15.2-DVD-x86_64的kde下使用远程桌面tigervnc
  7. SQLServer 数据 迁移转到Mysql 中
  8. 云大计算机初试最高分,2018年云南大学考研初试成绩及总分排名查询通知
  9. Python画蔡徐坤 附源码
  10. 如何摆放PCB元器件?(建议收藏)