汉诺塔(hanoi)

来源:互联网 发布:java工程师有前途吗 编辑:程序博客网 时间:2024/06/16 18:31

问题描述:

有三根柱子,第一根柱子上有n个盘子,借助第二根柱子,将第一根的所有盘子搬到第三根,在搬运过程中遵循每次只能搬一个,且大盘子在小盘子之下的原则。


解决方案:

首先把柱子标记为ABC, 由A搬至C,在只有一个盘子时,直接将它搬至C,当有两个盘子时,就将B作为辅助柱。如果盘子数超过二时,首先把A上边的n-1个盘子借助C,从A搬到B,再将第n个盘子搬到C,再借助A,将B上的n-1盘子搬到C。


代码描述:

#include <stdio.h>void hanoi(int n, char A, char B, char C) {if (n == 1) {printf("Move sheet %d from %c to %c\n", n, A, C);}else {hanoi(n - 1, A, C, B);printf("Move sheet %d from %c to %c\n", n, A, C);hanoi(n - 1, B, A, C);}}int main() {//假设盘子数为3个hanoi(3, 'A', 'B', 'C');getchar();return 0;}

运行结果:


0 0