汉诺塔的实现

来源:互联网 发布:环境科学与工程知乎 编辑:程序博客网 时间:2024/04/28 09:50

       从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面.如果有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号 1(小),2(中),3(大), 后面的原理解析引用这里的编号.


1.假设只有一个盘子的时候, 盘子数量 N=1

只有一个步骤   将第1个盘子从A移动到C, 为了对比方便我这样来描述这个步骤:

步骤  盘子编号 从柱子移动   移动到柱子

1       1                A               C

2. 如果有两个盘子, 盘子数量 N = 2

步骤  盘子编号 从柱子移动   移动到柱子

1              1                A               B

2              2                A               C

3              1                B               C

3. 如果有三个盘子, 盘子数量 N = 3

步骤  盘子编号 从柱子移动   移动到柱子

1                1     A                    C

2                2     A        B

3                1              C                     B

4                3              A                    C

5                1              B                    A

6                2              B                    C

7                1              A                    C   

代码如下:

#include <stdio.h>void hanoi( int n, char a,char b, char c ){if( n > 0 ){if( n == 1 )//如果只有一个盘子 {printf( "%c->%c\n",a,c );}else//盘子大于一进行递归 {hanoi( n-1 ,a,c,b );//将n-1个盘子从a借助c移至b printf( "%c->%c\n",a,c );//将最底层盘子从a移至c hanoi( n-1,b,a,c );//将n-1个盘子从b借助a移至c }}}int main(){hanoi( 2,'a','b','c' );return 0;}


1 0
原创粉丝点击