汉诺塔背景
文章目录
- 汉诺塔背景
- 前言
- 一、什么是汉诺塔?
- 二、汉诺塔问题的背景
- 三、汉诺塔问题的代码实现
- 1.代码原理
- 2.代码实现
前言
汉诺塔问题,是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱A、辅助柱B及目标柱C。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是汉诺塔?
汉诺塔(又称河内塔)问题是印度的一个古老的传说。 开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
二、汉诺塔问题的背景
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上(以下动图来源于百度)。
三、汉诺塔问题的代码实现
1.代码原理
C语言的函数递推,通过递推将A B C三个位置互换来实现汉诺塔。
2.代码实现
#include<stdio.h>
void hnt(int n, char A, char B, char C)
{if (1 == n){printf("%c -> %c\n", A, C);}else{hnt(n-1,A,C,B);printf("%c -> %c\n", A, C);hnt(n-1, B, A, C);}
}
int main()
{int n = 0;printf("请输入几级汉诺塔:");scanf("%d",&n);hnt(n,'A','B','C');return 0;
}