21xrx.com
2025-03-26 03:26:05 Wednesday
文章检索 我的文章 写文章
C语言编程之经典算法:汉诺塔
2023-06-15 16:59:33 深夜i     11     0
C语言 递归 算法

汉诺塔是一道经典的算法题,这个问题是怎样把所有盘子从左边的柱子借助中间的柱子移动到右边的柱子上。其中要求一个大盘子不能放在一个小盘子上面,问你该怎么做呢?

我们可以使用递归的思想来解决这个问题。先把n-1枚盘子移动到中间的柱子上,再将第n枚盘子从左边移动到右边的柱子上,最后再将中间的柱子上的n-1枚盘子移动到右边的柱子上。

在C语言中,我们可以使用函数来实现上述递归思路,具体实现可以见代码:

#include 
void hanoi(int n, char A, char B, char C) {
  if (n == 1)
    printf("%c -> %c\n", A, C);
  else {
    hanoi(n - 1, A, C, B);
    printf("%c -> %c\n", A, C);
    hanoi(n - 1, B, A, C);
  }
}
int main() {
  int n;
  printf("请输入盘子数:");
  scanf("%d", &n);
  printf("移动步骤为:\n");
  hanoi(n, 'A', 'B', 'C');
  return 0;
}

通过上面的C语言代码实现了汉诺塔问题,并将步骤输出在屏幕上。通过运行这个程序,可以得到任何数量盘子的汉诺塔解。

  
  

评论区