[算法题] 汉诺塔问题
来源:互联网 发布:吹风机推荐 知乎 编辑:程序博客网 时间:2024/06/06 01:24
问题描述
三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上。移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。移动次数: f(n)=2n -1
解法思路
使用递归算法进行处理。
汉诺塔的算法大概有3个步骤:
(1)把a上的n-1个盘通过c移动到b。
(2)把a上的最下面的盘移到c。
(3)因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了。
在网上找到一个3阶的汉诺塔递归过程示意图,参考一下。
代码实现
代码
<span style="font-family:SimSun;">#include <stdio.h>int step = 0;void hanoi(int n, char start, char assist, char end){ if(n>=1){ hanoi(n-1, start, end, assist); printf("move %d from %c --> %c \n", n, start, end); step++; hanoi(n-1, assist, start, end); }}int main(){ int n; printf("Please input the disk num: \n"); scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); printf("Totally move %d steps\n", step); return 0;}</span>
运行结果
Please input the disk num:
3
move 1 from A --> C
move 2 from A --> B
move 1 from C --> B
move 3 from A --> C
move 1 from B --> A
move 2 from B --> C
move 1 from A --> C
Totally move 7 steps
0 0
- [算法题] 汉诺塔问题
- 汉诺塔问题递归算法
- 递归算法-汉诺塔问题
- 递归算法--汉诺塔问题
- 算法之汉诺塔问题
- 算法:汉诺塔问题(c++)
- 递归算法--汉诺塔问题
- 汉诺塔问题--算法
- 分治算法--汉诺塔问题
- 汉诺塔问题算法介绍
- 汉诺塔问题算法介绍
- 算法练习--汉诺塔问题
- 算法题-注水问题
- 算法题-开灯问题
- 算法题/背包问题
- 汉诺塔问题的递归算法
- 汉诺塔问题递归算法分析:
- 汉诺塔问题递归算法分析
- 子类的拷贝构造函数如何调用其父类的拷贝构造函数
- STL—容器知识总结
- 访问:172652次 积分:3200 等级: 排名:第4396名 原创:160篇 转载:51篇 译文:5篇 评论:10条
- 精通Perl(第2版)
- public、private、protected、default的区别
- [算法题] 汉诺塔问题
- JZ2440下DM9000C网卡驱动问题的解决方法
- (2.1.5)内部类和匿名内部类
- Eclipse编译JNI头文件
- CentOS 6.4 配置BCM4313无线网卡
- Centos 7 minimal 配置 vsftpd文件服务器
- 第三周 项目二-三角形类二
- php内核分析---内存管理(一)
- 在Android使用adb管理sqlite数据库