汉诺塔问题的求解

原创 2012年03月22日 15:10:20

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

#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塔;

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

用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C

用 递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,...
  • u011329762
  • u011329762
  • 2014年11月11日 18:31
  • 7186

分治算法--汉诺塔问题

一、问题描述 1.有三根杆子A,B,C。A杆上有若干碟子 2.每次移动一块碟子,小的只能叠在大的上面 3.把所有碟子从A杆全部移到C杆上二、问题分析 将A盘中的若干个盘子分为两部分,下面一个,...
  • ydx115600497
  • ydx115600497
  • 2016年11月15日 16:47
  • 453

c语言经典问题:汉诺塔 Hanoi问题

这个问题使用递归思想是比较靠谱的,如果
  • zyb050607
  • zyb050607
  • 2014年06月24日 17:01
  • 1993

用栈模拟汉诺塔问题

在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件: ...
  • chriscute
  • chriscute
  • 2016年11月29日 20:19
  • 667

从递归算法思想解析汉诺塔问题

汉诺塔 - 问题起源 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到...
  • jespere_ling
  • jespere_ling
  • 2015年09月22日 17:52
  • 2566

汉诺塔问题的简单理解和总结

问题: 3个塔a、b、c,n个碟子。 初始——所有碟子放在a号塔,大的在底下,小的在上面 任务——把碟子移动到c号塔,顺序不变,可用b号塔辅助 限制——每次只能移动一个碟子,总是大碟子在下,小的在上 ...
  • douyxiang
  • douyxiang
  • 2013年12月10日 21:35
  • 1788

汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归

汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归 1. 汉诺塔问题的提法 汉诺塔问题是使用递归解决问题的经典范例。 传说婆罗门庙里有一个塔台,台上有3根标号为A、B、C的用钻石做成...
  • cainv89
  • cainv89
  • 2016年05月22日 23:32
  • 6454

汉诺塔问题及其变种

1.ABC三个柱子,小的不能在大的上面。从A移到C. //分析一下可知,每一次想要将一个大盘子从A移到C,就必须先把上面的小盘子从A移到B,最后再把B的盘子移到C,这样就是一个递归的过程。 #in...
  • qq_30346729
  • qq_30346729
  • 2017年05月24日 15:27
  • 206

n阶汉诺塔盘问题(Hanoi)

n阶汉诺塔盘问题
  • lvdezhou
  • lvdezhou
  • 2015年12月11日 13:32
  • 691

双层汉诺塔、八皇后等问题

搜索有以下几种算法: 枚举算法: 也即列举问题的所有状态从而寻找符合问题的解的方法。适合用于状态较少,比较简单的问题上。 广度优先搜索: 从初始点开始,根据规则展开第一层节点,并检...
  • u012386004
  • u012386004
  • 2013年11月12日 17:45
  • 1775
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汉诺塔问题的求解
举报原因:
原因补充:

(最多只允许输入30个字)