汉诺塔思解

对于这个问题我们应该先理清我们的思路:让我们把盘子从A座移到C座还要满足大盘子在上面小盘子在下面显然只有两个座没有办法完成这时候我们可以借助一个B座来完成。好了这里就是我的的做法。                                                                                                                                           

下面我们要来实施我们的搬盘子了。                                                                                                 

要是只有一个盘子我们直接从A座移动到C座就可以了。                                                                  

要是有两个盘子的话我们应该先把上面那个小的盘子先移动到B座把A座底下大盘子移动到C座,再把B座上面的盘子移动到C座上面。                                                                                                    要是有三个盘子  则把上面最小的盘子先移动到C座,在把中间的那个盘子移到B座,在再把C座那个盘子移到B座    ,把C座底下那个最大的盘子移到C座。再借助A座把盘子移到C座。                    ......

大致搬运过程如下:

具体步骤我们总结一下:1、先借助C座把盘子从A座移到B座,这样子盘子就全部都到B座             

2、再借助A座把盘子从B座移到C座,最后所有盘子都到C座上了。                                     

#include<stdio.h> 

//1、
void move(char A, char C,int n)
{
    printf("%c->%c\n", A,n, C);
}
void hanoi(int n, char A, char B, char C)
{
    if (n == 1)
    {
        move(A,1,C);//把那一个盘子从A座直接移动到C座
    }
    else
    {
        hanoi(n - 1, A, C, B);//第一步
        move(A, n, C);
        hanoi(n - 1, B, A, C);//第二步
    }
}

//2、

void hanoi(int n, char A, char B, char C)
{
    if (n == 1)
    {
        printf("%c->%c\n", A, C);
        return;
    }
    else
    {
        hanoi(n - 1, A, C,B);
        printf("%c->%c\n", A, C);
        hanoi(n - 1, B, A, C);
    }
}//
int main()
{
    int n;
    scanf("%d", &n);
    hanoi(n, 'A', 'B', 'C');
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值