关闭

汉诺塔(梵塔)问题

标签: c语言汉诺塔递归
517人阅读 评论(0) 收藏 举报
分类:

汉诺塔(梵塔)问题几乎是所有的初学编程的人遇到的问题,这个问题很好的运用了递归的特性,将原来看起来不好解决的问题变得异常简单,而且很容易理解。问题所有的人都知道就不描述了,代码很简单且有注释就不解释了

#include<iostream>
using namespace std;
int cnt=1;  //step计数
void hanoi(int n,char A,char B,char C);
int main()
{
    int n;
    char A,B,C;
    cout<<"3个柱子编号A B C,将圆盘从A借助C移到B,输入圆盘个数"<<endl;
    cin>>n;
    A='A'; B='B'; C='C';
    hanoi(n,A,B,C);         //将n个圆盘从A借助C移动到B
    return 0;
}
void hanoi(int n,char A,char B,char C)
{
    if(n==1)    //如果只有一个圆盘,直接移动就可以了
        cout<<cnt++<<" "<<A<<"-->"<<B<<endl;
    else{//大于一个圆盘时,先将前n-1个移到C上,然后将最后一个移到B上,最后再把C上的n-1个圆盘移到B上
        hanoi(n-1,A,C,B);
        cout<<cnt++<<" "<<A<<"-->"<<B<<endl;
        hanoi(n-1,C,B,A);
    }
}

PS:这个问题很简单,但是突然想到如果这个问题不是只有3个柱子,而是要求输入有n个圆盘,有m个柱子可以用,应该怎么做。通过大于3个的柱子容易证明必然会得到更好的解,也就是解随柱子的个数是单调不升的。
最开始以为会和原问题差不多的简单,但是后来写了几个递推式看了一下都不对,太晚了,有空再想想吧

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4481次
    • 积分:127
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论