汉洛塔问题的解决思路及其代码
问题描述:
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
分析:
如果要将n个圆盘按条件从A杆移到C杆,如果可以将n-1个圆盘移动到B杆,则可以将A杆中最大的圆盘移到C杆,那么我们就完成了一步,此后就可以不用考虑最大的盘,那么问题就变成了n-1个圆盘的问题了,依次类推,要想将n-1个圆盘移动到B杆,则需要将n-2个圆盘移动到C杆,要想将n-2个盘移动到C杆,则需要将n-3个盘移到B杆…
最后问题就变成了将一个圆盘移到B或C杆,然后就可以一步一步回推。
这个就像你要买冰箱,老板说你可以拿洗衣机来换,然后你去买洗衣机,老板说你可以拿空调来换,然后空调老板说你可以拿麻将桌来换,然后最后的老板说你可以拿一个鸡蛋来换,最后你拿着一个鸡蛋去一个一个换,最后得到了你想要的冰箱。至于你说为什么这么麻烦,别问,问就是没钱。
代码如下:
//使用递归方法
#include<stdio.h>
void move(c