问题描述:
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) |
|