问题描述:
有三根柱子,第一根柱子上有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;
}
运行结果: