梵塔问题

原创 2015年10月21日 14:22:25
#include<stdio.h>
int main()
{
    void FT(int n,char a,char b,char c);
    int n;
    printf("请输入盘子的个数:");
    scanf("%d",&n);
    printf("%d个盘子移动的步骤如下:\n",n);
    FT(n,'A','B','C');
    return 0;
}
void FT(int n,char a,char b,char c)
{
    if(n==1)
        printf("from %c to %c\n",a,c);
    else
    {
        FT(n-1,a,c,b);
        printf("from %c to %c\n",a,c);
        FT(n-1,b,a,c);
    }
}

梵塔问题需要用到问题的规约方法

要想将1、2、3、...、N,n个盘子(N表示最大的盘子,在最下面)通过B杆,从A杆移动到C杆。

首先将该问题分解为三个子问题

1、将1、2、...、N-1,n-1个盘子从A杆移动到B杆

<span style="white-space:pre">	</span>FT(n-1,a,c,b);

2、将N盘子从A杆移动到C杆

 <span style="white-space:pre">	</span>printf("from %c to %c\n",a,c);

3、将B杆上的盘子(1、2、...、N-1)移动到C杆

<span style="white-space:pre">	</span>FT(n-1,b,a,c);

子问题1再分解为三个小问题

(1)、将1、2、3、...、N-2,n-2个盘子从A杆移动到C杆

(2)、将N-1盘子从A杆移动到B杆

(3)、将C杆上的盘子(1、2、3、...、N-2)移动到B杆子

子问题3再分解为三个小问题

(1)、将1、2、3、...、N-2,n-2个盘子从B杆移动到A杆

(2)、将N-1盘子从B杆移动到C杆

(3)、将C杆上的盘子(1、2、3、...、N-2)移动到C杆子

如此进行规约直到只需要移动一个盘子时,可以直接移动。

<span style="white-space:pre">	</span>if(n==1)  printf("from %c to %c\n",a,c);








n圆盘梵塔问题的递归求解

  • 2010年06月26日 16:20
  • 225KB
  • 下载

汉诺塔(梵塔)问题

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

数塔问题解决方案

  • 2015年05月24日 19:08
  • 1KB
  • 下载

汉诺塔问题求解

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

数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现

C语言实现汉诺塔问题!

c语言求解汉诺塔问题

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

汉诺塔问题

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

汉诺塔问题的递归和非递归算法

汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上...

汉诺塔问题

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

单列汉诺塔问题

  • 2013年10月06日 08:38
  • 1.68MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:梵塔问题
举报原因:
原因补充:

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