問題描述:
1. 每次只能從一個柱子的最上面移動一個碟子到另外一個柱子上。
2. 不能將大碟子放到小碟子的上面。
按照前面這個規則,我們該怎麼去移動這些碟子呢?假定單位時間內可以移動一片碟子,那麼最終移動這些碟子到目的柱子需要多長的時間呢?
問題分析:
代碼:
//編譯已通過
#include <iostream>
using namespace std;
void move(int n, char a,char b){
cout << "編號" << n << " " << a<<"-->"<< b<<endl;
}
void hanoi(int n,char x,char y,char z){
if(n >= 1){
hanoi(n-1,x,z,y);//將x上編號爲1到n-1的圓盤移到y,z作輔助塔
move(n,x,z); //將編號爲n的圓盤從x移到z
hanoi(n-1,y,x,z);//將y上編號爲1到n-1的圓盤移到z,x作輔助塔
}
}
int main()
{
int num;
char x,y,z;
cin >> num >> x >> y >> z;
hanoi(num,x,y,z);
return 0;
}
代碼分析:
第一層 |
1 hanoi(3ABC) |
|
|
|
12 move(3AC) |
|
|
|
24END |
第二層 |
2 hanoi(2ACB) |
|
7 move(2AB) |
|
13 hanoi(2BAC) |
|
19 move(2BC) |
|
|
第三層 |
3 hanoi(1ABC) |
5 move(1AC) |
8 hanoi(1CBA) |
10hanoi(1CB) |
14 hanoi(1BCA) |
16 move(1BA) |
20 hanoi(1ABC) |
22 move(1AC) |
|
第四層 |
4 hanoi(0ACB) |
6 hanoi(0BAC) |
9hanoi(0CBA) |
11 hanoi(0ACB) |
15 hanoi(0BAC) |
17 hanoi(0CBA) |
21 hanoi(0ACB) |
23 hanoi(0BAC) |
|