汉诺塔问题

来源:互联网 发布:数据库性能测试工具 编辑:程序博客网 时间:2024/06/05 02:09

汉诺塔是根据一个传说形成的数学问题:


有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。

提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。


问:如何移?最少要移动多少次?


#include <iostream>using namespace std;void hannoi(int n, char A, char B, char C){if (n == 1){cout << "Move disk " << n << " from " << A << " to " << C << endl;}else{hannoi(n - 1, A, C, B);cout << "Move disk " << n << " from " << A << " to " << C << endl;hannoi(n - 1, B, A, C);}}int main(){cout << "Enter count of disks:";int n;//盘子的个数cin >> n;hannoi(n, 'A', 'B', 'C');return 0;}


简单记:只要记住ABC,ACB,BAC的顺序就可以了


Python版本

def honnoi(n, A, B, C):    if n==1:        print("disk",n,"from",A,"to",C)    else:        honnoi(n-1,A,C,B)        print("disk", n, "from", A, "to", C)        honnoi(n-1,B,A,C)honnoi(6,'A','B','C')
注意:调用honnoi()时要使用字符变量当作参数,否则需要修改print打印参数的格式


原创粉丝点击