C语言实现汉诺塔【图文讲解】-LMLPHP

本期介绍🍖

主要介绍:汉诺塔是什么,汉诺塔的规律,如何用C语言来实现汉诺塔👀。


目录

什么是汉诺塔

  汉诺塔(Tower of Hanoi),又称河内塔。源自印度古老传说的一个游戏,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。


如何用C语言实现汉诺塔

  现有三个柱子A、B、C,其中有n个圆盘在A柱上,最终要实现把这n个圆盘从A柱借助B柱移动到C柱上。实现实现思路:先将n-1个圆盘从A柱移动到B柱上,然后将A柱上最后一个圆盘移动到C柱上,最后再把B柱上的n-1个圆盘移动到C柱上。如下图所示:

C语言实现汉诺塔【图文讲解】-LMLPHP

以此类推,当汉诺塔上的圆盘数为n个时该如何移动,只需要按照上面的规律一直往上递归,最终是可以达到目的的。程序如下:

#include<stdio.h>

void move(char A, char C, int n)
{
	printf("把第%d个圆盘从%c--->%c\n", n, A, C);
}

void HanoiTower(char A, char B, char C, int n)
{
	if (n == 1)
	{
		move(A, C, n);
	}
	else
	{
		//将n-1个圆盘从A柱借助于C柱移动到B柱上
		HanoiTower(A, C, B, n - 1);
		//将A柱子最后一个圆盘移动到C柱上
		move(A, C, n);
		//将n-1个圆盘从B柱借助于A柱移动到C柱上
		HanoiTower(B, A, C, n - 1);
	}
}

int main()
{
	int n = 0;
	printf("输入A柱子上的圆盘个数:");
	scanf("%d", &n);
	//将n个圆盘从A柱借助于B柱移动到C柱上
	HanoiTower('A', 'B', 'C', n);
	return 0;
}

C语言实现汉诺塔【图文讲解】-LMLPHP
  若想知道一共移动了多少次圆盘,只需要在move()函数中加一个全局变量来统计个数就行。


C语言实现汉诺塔【图文讲解】-LMLPHP

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。

01-27 00:04