算法之美:汉诺塔(Hanoi)问题

2022-11-15 14:03:08 浏览数 (2)

设移动盘子数为n,为了将这n个盘子从A杆移动到C杆,可以做以下三步: (1)以C盘为辅助,从A杆将1至n-1号盘移至B杆; (2)将A杆中剩下的第n号盘移至C杆; (3)以A杆为辅助;从B杆将1至n-1号盘移至C杆。

我们采用递归的方法解决该问题:(编译环境:Ubuntu18.04 Vim)

代码语言:javascript复制
#include <stdio.h>

void hano(int n, int src, int aux ,int dest)/*n为移动盘子数,src为起始杆,dest为目标杆,aux为辅助杆*/
{
    if(n == 1)
    {
        printf("mov no.%d disc :from %c to %cn",n,src,dest);

        return;
    }

    hano((n - 1),src,dest,aux);
    printf("mov no.%d disc: from %c to %cn",(n - 1),src,dest);
    hano((n - 1),aux,src,dest);
}

int main()
{
    hano(3,'A','B','C');

    return 0;
}

运行结果:

0 人点赞