算法如下:
1 #include "stdafx.h" 2 #include3 using namespace std; 4 int m = 0; 5 void move( int n, char A, char C) //把第n个盘子从A柱移到C柱 6 { 7 cout << ++m << "," << n << "," << A << "," << C << endl; //m为第几次执行移动操作 8 } 9 10 void Hanoi(int n, char A, char B, char C) //第n个盘子借助B柱从A柱移到C柱11 {12 if (n == 1)13 move(1 , A , C);14 else15 {16 Hanoi(n-1,A,C,B); //把第1——(n-1)个盘子看成一个整体,(n-1)个盘子借助C柱从A柱移到B柱17 move( n ,A, C); //第n个盘子从A柱移到C柱18 Hanoi(n - 1, B, A, C); //把第n个(也就是最后的最大的那个盘子)从B柱借助A柱移到C柱19 }20 }21 22 int main()23 {24 int p;25 cin >> p;26 Hanoi(p, 'A', 'B', 'C');27 return 0;28 }
一组温馨的样例: