您的位置:首页 > 其它

经典问题之汉诺塔

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),这又是一个递归的过程.

代码如下:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: