关闭

汉诺塔问题的求解

2442人阅读 评论(0) 收藏 举报

关于汉诺塔问题的描述和求解在网络上面一大堆,这里就不多陈述,直接看代码:

#include <iostream>
using namespace std;
void hanio(int count, char first, char second, char third)
{
	if(count > 0)
	{
		hanio(count - 1, first, third, second);
		cout << count << "move from " << first << " to " << third <<endl;
		hanio(count - 1, second, first, third);
	}
}
int main()
{
	hanio(2, 'a', 'b', 'c');
	return 0;
}

以上输出了下面的内容:

xy@ubuntu:~/primer$ ./a.out
1move from a to b
2move from a to c
1move from b to c
xy@ubuntu:~/primer$ 

答案就不说了。关键是看下这个递归的过程,递归的直观的描述是这样的:

将n-1个块从a塔借助c塔移动到b塔;

将第n块从a塔移动到c塔;

将n-1个块从b塔借助a塔移动到c塔;

当n=0时,移动停止;

对应到函数hanio的参数就是(木块数目,a塔,b塔,c塔),这个a塔,b塔,c塔的顺序是有含义的,即从a塔借助b塔,移动到c塔;

后面对这个函数的调用要遵循这个含义。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:201991次
    • 积分:3836
    • 等级:
    • 排名:第8599名
    • 原创:182篇
    • 转载:27篇
    • 译文:0篇
    • 评论:63条
    最新评论