算法思想:(1)将A上的m-1个盘借助C移到B上
(2)将A上的最后一个大盘移到C上
(3)将B上的m-1个盘通过A移到C上
基于以上思想可以采用递归方法,将设需要移动n个盘,则总共需要移动2n-1次。
代码如下:
1 #include<stdio.h> 2 void hanoi(int m,char one,char two,char three) 3 { 4 void move(char,char); //定义move函数 5 if(m==1) //当m为1时直接将盘子从A移到C 6 move(one,three); 7 else //递归执行 8 { 9 hanoi(m-1,one,three,two); 10 move(one,three); 11 hanoi(m-1,two,one,three); 12 } 13 } 14 void move(char x,char y) //用于展示执行过程 15 { 16 printf("%c-->%c\n",x,y); 17 } 18 int main() 19 { 20 int m; 21 char A,B,C; 22 printf("请输入盘子数目:"); 23 scanf("%d",&m); 24 hanoi(m,'A','B','C'); 25 }
运行结果如下
注意:因为移动次数是2的n次幂,所以每增加一个移动次数就会成倍增加,所以不要输入太大的数,不然系统执行时间变长。