汉诺塔
【问题描述】
有n个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱上无盘子),但绝不允许发生柱上出现大盘子在上,小盘子在下的情况,现要求设计将A柱子上n个盘子搬移到C柱去的方法。
【样例输入】
3
【样例输出】
1:x ----> z
2:x ----> y
3:z ----> y
4:x ----> z
5:y ----> x
6:y ----> z
7:x ----> z
7
【过程分析】
#include<iostream> using namespace std; int cnt=0; void hnt(int n, char x, char z, char y){ if(n==0) return; // 假设n=2,则: hnt(n-1, x, y, z); // x->y,所以z过度柱。 cnt++; cout<<cnt<<" "<<x<<" ----> "<<z<<endl; // x->z 直接输出,不需要调用。 hnt(n-1,y, z, x); // y->z,所以x过度柱。 } int main(){ int n; cin>>n; hnt(n,'x', 'z', 'y'); // y是过度柱。 cout<<cnt; return 0; }