
Algorithms
chenpiing
非科班大码渣
展开
-
汉诺塔问题--递归版
问题:有三个柱子放在左中右三个位置,左边柱子上有n个碟子(都不一样大)从上到下按从小到大的顺序叠起来放置,最底下是第n个碟子,最大。现要将n个碟子从左边柱子移动到右边柱子。要求:每次只能移动一个碟子;大碟子不能压在小碟子上;只能往相邻的柱子移动。求移动碟子的最少次数,并输出移动次数最少时的每个移动过程。 递归版本 n个碟子的问题可以这么考虑:先将n-1个碟子从左柱子依次移动到中间、右边的柱...原创 2018-08-01 15:35:43 · 920 阅读 · 0 评论 -
汉诺塔问题--迭代版本
接着讨论之前的问题汉诺塔问题–递归版,也可以用迭代实现,考虑用三个栈代表三根柱子,出栈入栈代表了碟子的离开柱子和到达柱子的过程。 考虑碟子移动的过程: 由于要最小化移动次数,因此不会出现两次相临的移动都发生在同一对柱子间。因此当左中柱子间发生碟子移动时,下一次移动必发生在中间和右边; 对于一对柱子(左中,中右),要判断哪个出栈哪个入栈很简单,若其中一个为空,则此栈将另一个出栈的元素入栈。若都...原创 2018-08-01 17:41:18 · 1830 阅读 · 0 评论