PKHUDPKHUD08-22 02:33

简单的汉诺塔问题

 

算法如下:

 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 }

 

一组温馨的样例:

 

程序之家二维码

000
评论