这是经典的'汉诺塔'问题,可以用递归算法来解决。具体步骤如下:

  1. 如果A柱子上只有一个盘子,直接将它移动到C柱子上。

  2. 如果A柱子上有n个盘子,先将上面n-1个盘子借助C柱子移动到B柱子上,然后将第n个盘子直接从A柱子移动到C柱子上,最后再将B柱子上的n-1个盘子借助A柱子移动到C柱子上。

递归函数的代码如下:

void hanoi(int n, char from, char to, char via)
{
    if(n == 1)
    {
        printf('Move disk %d from %c to %c\n', n, from, to);
    }
    else
    {
        hanoi(n-1, from, via, to);
        printf('Move disk %d from %c to %c\n', n, from, to);
        hanoi(n-1, via, to, from);
    }
}

在主函数中调用hanoi函数即可:

int main()
{
    int n = 64;
    hanoi(n, 'A', 'C', 'B');
    return 0;
}

由于盘子数量为64,所以可能需要一些时间来计算。

C语言实现汉诺塔问题:64个盘子的移动方案

原文地址: https://www.cveoy.top/t/topic/oYUL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录