Guo Qiang

汉诺塔问题

发布日期 2020-10-11 09:31:01已读 148 次CODE
image

汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭,也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。


/* 这里代表将a柱子上的盘子借助b柱子移动到c柱子 */
void hanoi(int n, char a, char b, char c)
{
	/* 如果是一个盘子直接将a柱子上的盘子移动到c */
	if (n == 1)
		printf("%c-->%c\n", a, c);
	else
	{
		/* 将a柱子上n-1个盘子借助c柱子,移动到b柱子 */
		hanoi(n - 1, a, c, b);

		/* 再直接将a柱子上的最后一个盘子移动到c */
		printf("%c-->%c\n", a, c);

		/* 然后将b柱子上的n-1个盘子借助a移动到c */
		hanoi(n - 1, b, a, c);
	}
}


Copyright © 2019~2021 Guo Qiang