首先,分析最简单的一种情景:
只有一个圆盘,此时只需要将其从A柱移动到C柱即可。
再考虑两个圆盘的情景:
此时则需要先将第一个盘子通过(绕过)C柱移动到B柱;
然后将第二个盘子通过(绕过)B柱移动到C柱;
最后再将第一个盘子直接移动到C柱即可
当情景复杂些,存在三个盘子,该如何思考呢?
相同的道理,只需先处理上面的两个盘子将其看作一个整体,可将此化简为两个盘子的情景,按照上面的步骤可以解决问题。
将两个盘子作为一个整体,可先将第一个盘子通过(绕过)B柱移动到C柱,再将第二盘子通过(绕过)C柱移动到B柱,最后再将第一个盘子移动到B柱即可。
#include<stdio.h> void hanoi(int i,char A,char B,char C) { if (1 == i) { printf("%c->%c\n", A, C); } else { //将A柱上的n-1个圆盘通过C柱移动到B柱上 hanoi(i - 1, A, C, B); //将A柱中最后一个1圆盘直接移动到C柱上 printf("%c->%c\n", A, C); //将B柱上n-1个圆盘借助A柱移动到C柱上 hanoi(i - 1, B, A, C); } } int main() { int i = 0; scanf("%d", &i); hanoi(i, 'A', 'B', 'C'); return 0; }