C语言实现汉诺塔问题:64个盘子的移动方案
这是经典的'汉诺塔'问题,可以用递归算法来解决。具体步骤如下:
-
如果A柱子上只有一个盘子,直接将它移动到C柱子上。
-
如果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,所以可能需要一些时间来计算。
原文地址: https://www.cveoy.top/t/topic/oYUL 著作权归作者所有。请勿转载和采集!