汉诺塔问题

来源:互联网 发布:刀剑乱舞囚禁play乐乎 编辑:程序博客网 时间:2024/06/11 07:27

【问题】上帝创造世界时造了3根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆片,上帝命令婆罗门把圆盘从上面开始按大小顺序重新摆放到第二根柱子上,并且规定一次只能移动一个圆盘,在小圆盘上不能放大圆盘。编程求解n个圆盘的汉诺塔问题。


【分析】递归:1.将前n-1个圆盘从第一根柱子移到第三个柱子,即:A->C;

2、将第n个圆盘从第一个柱子移到第二个柱子,即:A->B;

3、将前n-1个圆盘从第三个柱子移到第二个柱子。

【代码实现】

#include <stdio.h>
void Hanoi(int n,char a,char b,char c);
void Move(int n,char a,char b);
int main()
{
    int n;
    printf("Input the number of disks:\n");
    scanf("%d",&n);
    printf("Steps of moving %d disks from A to B by means of C:\n",n);
    Hanoi(n,'A','B','C');
    return 0;
}
/*函数功能:用递归方法将n个圆盘借助c从a移动到b*/
void Hanoi(int n,char a,char b,char c)
{
    if(n==1)
    {
        Move(n,a,b);
    }
    else
    {
        Hanoi(n-1,a,c,b);//将n-1个圆盘a->c
        Move(n,a,b);//第n个圆盘a->b
        Hanoi(n-1,c,b,a);//将n-1个圆盘c->b;
    }
}
//函数功能:将第n个圆盘从a->b
void Move(int n,char a,char b)   { printf("Move %d :from %c to %c \n",n,a,b); }

原创粉丝点击