
重新整理数据结构与算法(c#)—— 算法套路分治算法[二十五]
发布日期:2021-05-09 00:46:31
浏览次数:21
分类:博客文章
本文共 803 字,大约阅读时间需要 2 分钟。
前言
有一个汉罗塔的游戏如下:
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
正文
假设有一个盘子:
那么直接从a到c。
假设有两个盘子。
那么小盘子从a到b。然后大盘子从a-c,小盘子从b-C3个盘子:
最小的盘子从a->c,然后中盘a-b,然后吧a->b,小盘从c->b,然后吧最大盘放到C上,这时候就放好了一个盘,这时候最大盘已经不用管了,其实就剩下2个盘。然后把小盘放在a,然后中盘b->C,然后小盘a->c。
这时候发现一个规律啊,那就是比如我们又n个盘,放好了一个盘后,其实处理的问题了处理次数是和n-1个盘是一样的。
代码:
static void Main(string[] args){ hanoiTower(5,'A','B','C'); Console.Read();}public static void hanoiTower(int num, char a, char b, char c){ if (num == 1) { Console.WriteLine("运动:" + a + "->" + c); } else { //将num-1个盘从a搬运到b hanoiTower(num - 1, a, c, b); //将一个盘搬运到C完成一个盘 Console.WriteLine("运动:" + a + "->" + c); //当一个盘搬运完毕后,剩下就是处理num-1个盘的问题了,那么此时的b就是原来的a hanoiTower(num - 1, b, a, c); }}
结果:
我现实中折纸试过。发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月02日 15时40分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MacOS 应对系统无响应的方法
2021-05-17
Mac隐藏辅助功能|自定义苹果Mac显示器
2021-05-17
ActivityNotFoundException异常错误
2021-05-17
git远程仓库切换
2021-05-17
学习Vue.js2.0(国外视频教程)
2021-05-18
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2021-05-18
微信小程序云开发:怎么删除云函数?已解决
2021-05-18
PyCharm配置anaconda环境
2021-05-18
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
2021-05-18
word文档手写字母总会大写问题
2021-05-18
Spring 和 DI 依赖注入
2021-05-18
laravel server error 服务器内部错误
2021-05-18
iJ配置Maven环境详解
2021-05-18
面试题 08.01. 三步问题
2021-05-18
剑指 Offer 11. 旋转数组的最小数字
2021-05-18
作为我的第一篇csdn博客吧
2021-05-18
一道简单的访问越界、栈溢出pwn解题记录
2021-05-18
响应的HTTP协议格式+常见的响应码
2021-05-18