经典问题之汉诺塔
2010-07-20 15:54
267 查看
汉诺塔问题
汉诺塔其实想深了会觉得复杂,想简单了,你会觉得不可能吧?
这就是算法的乐趣
汉诺塔的递归思想解法很简单,大的问题分解为小的问题求解.
1.假如只有一个盘子,那么直接从A移动到C盘即可
2.假如有两个盘子,那借助B,步骤如下:A->B,A->C,B->C
3.假如有3个甚至更多盘子
可以运用递归思想了,盘子再多,也都是有规律的,上大下小.
移动盘子就容易了:
把除了最后一个盘子外的所有盘子移动到辅助柱子(A->B),
再把最后那个盘子移动到目标柱子上(A->C),
最后再把辅助柱子上的盘子,借助A,移动到C上(B->C),这又是一个递归的过程.
代码如下:
汉诺塔其实想深了会觉得复杂,想简单了,你会觉得不可能吧?
这就是算法的乐趣
汉诺塔的递归思想解法很简单,大的问题分解为小的问题求解.
1.假如只有一个盘子,那么直接从A移动到C盘即可
2.假如有两个盘子,那借助B,步骤如下:A->B,A->C,B->C
3.假如有3个甚至更多盘子
可以运用递归思想了,盘子再多,也都是有规律的,上大下小.
移动盘子就容易了:
把除了最后一个盘子外的所有盘子移动到辅助柱子(A->B),
再把最后那个盘子移动到目标柱子上(A->C),
最后再把辅助柱子上的盘子,借助A,移动到C上(B->C),这又是一个递归的过程.
代码如下:
#include <stdio.h> void hanoi(int n, char A, char B, char C) { if(n == 1) { printf("Move sheet from %c to %c\n", A, C); } else { hanoi(n-1, A, C, B); hanoi(1, A, B, C) hanoi(n-1, B, A, C); } } int main() { int n; printf("請輸入盤數:"); scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); return 0; }
相关文章推荐
- 经典递归问题回顾——汉诺塔
- 汉诺塔 - 经典递归问题
- 递归的经典应用----汉诺塔问题
- 经典的汉诺塔问题
- 两个经典递归问题:菲波那契数列 + 汉诺塔
- Uva10795 新汉诺塔问题(转化模型,经典题)
- 经典递归解决汉诺塔问题 python实现
- 递归经典算法 汉诺塔问题
- 经典问题之汉诺塔
- 汉诺塔问题是使用递归解决问题的经典范例。
- 【项目三之经典问题——汉诺塔】
- 经典递归问题--汉诺塔
- 学习笔记---递归的代码,解决经典的汉诺塔问题
- 经典的汉诺塔问题,非经典的Pro
- 171028—经典递归问题:汉诺塔(自写分析)
- 递归函数的经典例子(汉诺塔问题)
- 经典问题-汉诺塔(hanoi)
- python经典的递归问题----汉诺塔
- 【经典问题】汉诺塔(递归、C语言实现)
- 经典递归问题--汉诺塔