开发者社区> 问答> 正文

编程实现5个盘子的汉诺塔问题;(递归算法)

请问怎么用C++编这个程序,并写出程序。

展开
收起
知与谁同 2018-07-21 14:38:10 2529 0
5 条回答
写回答
取消 提交回答
  • 12535
    不好意思,不懂哦。
    2019-07-17 22:55:28
    赞同 展开评论 打赏
  • 杀人者,打虎武松也。
    用vb行吗。
    2019-07-17 22:55:28
    赞同 展开评论 打赏
  • 这是n个盘子的
    #include <iostream>
    using namespace std;
    char b[1000][2];
    int f(int a)
    {
    if(a==1)
    {
    b[0][0]='a';
    b[0][1]='c';
    return 1;
    }
    int ls,i,j;
    ls=f(a-1)*2+1;
    for(i=0;i<(ls-1)/2;i++)
    {
    for(j=0;j<=1;j++)
    {
    if(b[i][j]=='c')b[i][j]='b';
    else if(b[i][j]=='b')b[i][j]='c';
    }
    }
    b[i][0]='a';
    b[i][1]='c';
    for(i=(ls+1)/2;i<ls;i++)
    {
    for(j=0;j<2;j++)
    {
    b[i][j]=b[i-(ls+1)/2][j];
    if(b[i][j]=='b')b[i][j]='c';
    else if(b[i][j]=='c')b[i][j]='b';
    }
    }
    for(i=(ls+1)/2;i<ls;i++)
    {
    for(j=0;j<2;j++)
    {
    if(b[i][j]=='a')b[i][j]='b';
    else if(b[i][j]=='b')b[i][j]='a';
    }
    }
    return ls;
    }
    int main()
    {
    int n,r,i,j;
    cin>>n;
    r=f(n);
    cout<<r<<endl;
    for(i=0;i<r;i++)
    {
    for(j=0;j<2;j++)
    {
    cout<<b[i][j]<<' ';
    }
    cout<<endl;
    }
    system("pause");
    return 0;
    }

    程序会输出步数和操作
    2019-07-17 22:55:28
    赞同 展开评论 打赏
  • 云栖社区聚能聊、问答管理员~发福利、搞怪,八卦我来,论技术、发话题、写博客你上!
    //汉诺塔c++程序
    #include<iostream>
    using namespace std;

    void hanoi(int,int,int,int);//用于递归的函数
    void print(int,int);//从一个桩移动到另一个桩

    int A=1,B=2,C=3;
    static int counter = 0;//用于计算总共移动的次数
    int main()
    {
    int n;//移动的盘数

    cout<<"please enter the quantity of the plates:";
    cin>>n;
    hanoi(n,A,B,C);
    cout<<"Totally used "<<counter<<" steps."<<endl;
    return 0;
    }
    void print(int A,int C)//将盘从A移动到C
    {

    cout<<"plate "<<A<<":"<<A<<"-->"<<C<<endl;
    counter+=1;
    }
    void hanoi(int n,int A,int B,int C)
    {
    if(n==1)
    print(A,C);
    else
    {
    hanoi(n-1,A,C,B);
    print(A,C);
    hanoi(n-1,B,A,C);
    }
    }
    2019-07-17 22:55:28
    赞同 展开评论 打赏
  • 以下是5个盘子的汉诺塔程序,用的是递归算法:
    #include<fstream>
    #include<iostream>
    using namespace std;
    ofstream fout("Honnoi.txt");
    int num=1;//记录步数

    void Move(int n,char x,char y)
    {
    fout<<num<<":"<<"把"<<n<<" 号盘,从"<<x<<"柱移到"<<y<<"号柱"<<endl;
    cout<<num<<":"<<"把"<<n<<" 号盘,从"<<x<<"柱移到"<<y<<"号柱"<<endl;
    ++num;
    }

    void Hannoi(int n,char A,char C,char B)
    {
    if(n==1)
    Move(1,A,C);
    else
    {
    Hannoi(n-1,A,B,C);
    Move(n,A,C);
    Hannoi(n-1,B,C,A);
    }
    }

    int main()
    {
    Hannoi(5,'A','C','B');
    cout<<"输出完毕!"<<endl;
    cout<<"一共"<<num-1<<"步"<<endl;
    return 0;
    }
    程序将输出步数、每步操作和总步数
    2019-07-17 22:55:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载