汉诺塔问题超级详解

汉诺塔问题

在这里插入图片描述
1,我们为了后期方便讲解首先进行一个简单的命名—— 起始柱:1; 过度柱: 2; 目标住:3;
2,由于汉诺塔问题是一个明显的递归问题,所以我们用递归的思想来解决它。
3,我们可以把n个盘子想成两个部分:第n个盘子和前n-1个盘子。要想把这n个盘子从1柱移动到3柱,首先需要把前n-1个盘子先移动到2柱上,接着将第n个盘子从1柱移动到三柱上。(注意:我们这里把前n-1个盘子看成一个整体。)

图解

我们以三个盘子做图解示例。
在这里插入图片描述
注释:1 by 2 to 3:起始柱为1柱,通过过度柱2,去目标住3.

代码

下面我们用代码实现这个过程。
下面展示一些 内联代码片

// void Hanoi(int n, int a, int b, int c)
{
	static int flag = 0;
	if (n > 1)
	{
		Hanoi(n - 1, a, c, b);
		printf("第%d次:%d to %d\n",++flag, a, c);
		Hanoi(n - 1, b, a, c);
	}
	else
		printf("第%d次:%d to %d\n",++flag, a, c);
}
int main()
{
	int n = 0;
	int a = 0;
	int b = 0;
	int c = 0;
	printf("几个盘子  起始柱   过度柱   目标住\n");
	scanf("%d %d %d %d", &n,&a,&b,&c);
	Hanoi(n, a, b, c);
	return 0;
}

制作不易,如果对你有帮助,点个赞,留下你的关注吧。

猜你喜欢

转载自blog.csdn.net/Djsnxbjans/article/details/125997823