漢諾塔
要把A柱子上的盤子移動到C柱子上,在移動過程中可以借助B柱子,但是要求小的盤子在上大的盤子在下。
解題思路:
1、把A柱子上的前N-1個盤子借助C柱子,全部移動到B柱子上(過程暫不考慮),再把第N個盤子由A柱子移動到C柱子上。
那么剩下要移動的盤子在B柱子上了。
2.把B柱子上的前N-2個盤子借助C柱子,全部移動到A柱子上(過程暫不考慮),再把第N-1個盤子由B柱子移動到C柱子上。
重復上面的兩個步驟即可把A柱子上的盤子全部移動到C柱子上。
算法實現:
#include <stdio.h> int num=0;//統計移動次數3 void hanio(int n,char a,char b,char c){ //n是盤的個數 A,B,C為三個放盤的塔 if(n==1){ num++; // 移動一次加一次 printf("第%d次 %c-->%c\n",num,a,c); //打印A移動到C }else{ hanio(n-1,a,c,b); //n-1次 A通過C移動到B num++; // 移動一次加一次 printf("第%d次 %c-->%c\n",num,a,c); //打印A移動到C hanio(n-1,b,a,c); //n-1次 B通過A移動到C } } int main() { int n=3; hanio(n,'A','B','C'); }