简单的汉诺塔问题
算法如下:
1 #include "stdafx.h" 2 #include<iostream> 3 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 else 15 { 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 }
一组温馨的样例: