汉诺塔(梵塔)问题

原创 2015年11月20日 21:39:01

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

#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个的柱子容易证明必然会得到更好的解,也就是解随柱子的个数是单调不升的。
最开始以为会和原问题差不多的简单,但是后来写了几个递推式看了一下都不对,太晚了,有空再想想吧

版权声明:本文为博主原创文章,未经博主允许不得转载。

汉诺塔问题求解

  • 2015年06月15日 17:28
  • 1KB
  • 下载

c语言求解汉诺塔问题

  • 2014年08月22日 11:08
  • 12KB
  • 下载

汉诺塔问题 hanoi tower (递归)。

又来填坑了。 还是递归问题,这次是汉诺塔。 题意是这样的:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同...

汉诺塔问题

  • 2014年11月14日 23:32
  • 21.94MB
  • 下载

汉诺塔问题

  • 2013年12月18日 00:29
  • 528B
  • 下载

递归和迭代算法 [汉诺塔问题]

递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大...

单列汉诺塔问题

  • 2013年10月06日 08:38
  • 1.68MB
  • 下载

汉诺塔问题

  • 2014年03月17日 23:54
  • 2KB
  • 下载

汉诺塔问题(递归过程解析)

 从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 如果有3个盘子, 大中小号, ...

汉诺塔问题

  • 2014年04月28日 15:43
  • 4.78MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汉诺塔(梵塔)问题
举报原因:
原因补充:

(最多只允许输入30个字)