首页 > 编程 > C++ > 正文

有关汉诺塔的算法问题——C++递归

2019-11-06 07:06:52
字体:
来源:转载
供稿:网友

汉诺塔问题发源于古老的梵天寺之塔仪式,传说当世界诞生的时候,有一座摞了64个黄金碟子的钻石塔(记为A塔)。碟子按从大到小的次序自底向上地摞在塔上。除此之外还有两个钻石塔(记为B和C塔),从世界诞生之日开始,梵天寺的僧侣们就通过塔C将碟子从A塔搬到B塔,但每次只能搬一个碟子,并且任何时候都不能大的碟子在上小碟子在下。根据传说,当僧侣完成任务是就是世界毁灭之时。

这个问题可以用递归来解决。假设碟子数是n个,为了将最大的第n个从A搬到B,需要先将剩下的n-1个碟子搬到C上,我们需要解决的问题就是如何将塔C上的碟子搬到塔B上。此时我们可以用塔A和B,可以先不管B上已有的碟子,因为它是最大的,其他碟子都可以放在它上面。这时就可以用递归算法。改程序首次调用是TowersOfHanio(n,A,B,C).即将一个搬运n个碟子的问题转换为两个搬动n-1个碟子的问题。

#include<iostream>enum tower{A = 'A',B = 'B',C = 'C'};void TowersOfHanoi(int n,tower X,tower y,tower z)//从塔x的顶部移动n个碟子到塔y {	if(n)	{		TowersOfHanio(n-1,x,z,y);		cout<<"move top disk from tower"<<char(x)<<"to top of tower"<<char(y)<<endl;		TowersOfHanio(n-1,z,y,x);	} } 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选