算法思想:(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次冪,所以每增加一個移動次數就會成倍增加,所以不要輸入太大的數,不然系統執行時間變長。