写烂的编程算法问题!经典算法每日一题之汉诺塔
之所以叫做写烂的编程算法问题,是因为解法到处都是,随便百度一下,遍地都是,
这里就不过分叙说了。
汉诺塔
河内塔(又称汉诺塔)问题,就是在一块木板上有三个立柱,在柱1上放着三个圆盘,小的在上面,大的在下面(初始状态)。让被试将在柱1上的三个圆盘移到柱3上面(目标状态)。条件是:每次只能移动任何一个柱子上面的一个圆盘,但大的圆盘不能放在小的圆盘上。通用问题解决者的解决过程即是手段—目的分析的策略。
解题思路
递归法
- 把A上面n-1个盘子移动到B上。
- 把A上最后一个移动到C;
- 把B上n-1个移动到A上,再把B上最后一个移动到C;
如此循环2,3,步骤,直到把最后一个盘子移动到C上。
代码如下
测试结果
阅后战一战
汉诺塔可以通过非递归算法解析,有兴趣的读者可以尝试下,代码网上多的是。关于本方法有精品制作的动态ppt描述,可以获取看下,助于理解。
閱讀更多 C語言源代碼計劃 的文章