汉诺塔(梵塔)问题

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

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

汉诺塔问题(三阶梵塔问题)

  • blacksapper
  • blacksapper
  • 2010年06月20日 16:19
  • 1598

4.梵塔问题:

4.梵塔问题:有3个柱子(1,2,3)和3个不同尺寸的圆盘(A,B,C)。在每个圆盘的中心有个孔,所以圆盘可以堆叠在柱子上。最初,全部3个圆盘都堆在柱子1上:最大的圆盘C在底部,最小的圆盘A在顶部。要...
  • liuCoding
  • liuCoding
  • 2016年09月28日 09:57
  • 1313

汉诺塔问题以及时间复杂度

汉诺塔问题递归方法以及时间复杂度的分析
  • qq_33274645
  • qq_33274645
  • 2016年09月28日 10:00
  • 3850

汉诺塔C++实现(递归调用)

汉诺塔C++实现,递归调用。#include using namespace std; void hanoi(int n, char one, char two, char three); //Ha...
  • Lina_ACM
  • Lina_ACM
  • 2016年10月05日 19:03
  • 290

用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C

用 递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,...
  • u011329762
  • u011329762
  • 2014年11月11日 18:31
  • 7350

算法基础:递归---汉诺塔问题

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,...
  • qq_33545916
  • qq_33545916
  • 2016年03月13日 22:40
  • 330

汉诺塔--c语言递归问题

Description 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把...
  • stary_yan
  • stary_yan
  • 2015年11月16日 14:06
  • 2191

汉诺塔(河内塔)算法与心得

问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上。我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面。思...
  • q651742112
  • q651742112
  • 2017年09月04日 19:16
  • 463

java中使用递归求解汉诺塔问题

最近帮朋友编写了一段代码,主要原理就是和解决汉诺塔问题类似,下面就开以此来讲解一下汉诺塔问题。 问题描述如下: 古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在...
  • w_y_loong
  • w_y_loong
  • 2012年07月15日 21:14
  • 6158

双色汉诺塔问题

//双色汉诺塔问题 #include using namespace std; int removeTimes = 0; void hanoiorignal(int nmovnum, char cz...
  • firechungelaile
  • firechungelaile
  • 2014年09月29日 22:19
  • 2378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汉诺塔(梵塔)问题
举报原因:
原因补充:

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