算法——n阶Hanoi塔问题
问题
假设有3个分别命名为A、B、C的塔座,在塔座A上插有n个直径大小各不相同,从小到大编号为1,2,…,n的圆盘。现要求将塔座A上的n个圆盘移至塔座C上,并按同样的顺序叠排,圆盘移动时必须遵循下列规则:
- 每次只能移动一个圆盘
- 圆盘可以插在A,B,C的任一塔座上
- 任何时刻都不能将一个较大的圆盘压在较小的圆盘之上
分析
设A柱上最初的圆盘总数为n,当n=1时,只要移动1次;否则执行以下三步:
- 用C柱做过渡,将A柱上的(n-1)个盘子移到B柱上;
- 将A柱上最后一个盘子直接移到C柱上;
- 用A柱做过渡,将B柱上的(n-1)个盘子移到C柱上。
实现代码
int m=0;//对移动次数进行统计
void move(char A,int n,char C)
{//定义一move方法,将编号为n的圆盘从A移到Ccout<<++m<<","<<n<<","<<A<<","<<C<<endl;
}
void Hanoi(int n,char A,char B,char C)
{//将塔座A上的n个圆盘按规则搬到C上,B做辅助塔。if(n==1)move(A,1,C);//将编号为1的圆盘从A移到Celse{Hanoi(n-1,A,C,B);//将A上编号为1至n-1的圆盘移到B,C做辅助塔move(A,n,C);//将编号为n的圆盘从A移到CHanoi(n-1,B,A,C);//将B上编号为1至n-1的圆盘移到C,A做辅助塔}
}
算法——n阶Hanoi塔问题相关推荐
- n阶Hanoi塔问题(动图分析)-C语言
n阶Hanoi塔问题 Hanoi塔问题规则 Hanoi塔分析 参考程序 Hanoi塔问题规则 每次只能移动一个圆盘: 圆盘可以插在X.Y和Z中的任一塔座上: 任何时刻都不能将一个较大的圆盘压在较小的圆 ...
- 算法分析——Hanoi塔问题
上图为 3 阶 Hanoi 塔 假设有三个命名为 A B C 的塔座 ,在塔座A上插有n个直径大小不相同,由小到大编号为1 ,2 ,3 ,··· ,n的圆盘,要求将A座上的圆盘移至塔座C 并按同样的顺 ...
- 基础算法:Hanoi塔(递归)
Hanoi塔 "递归算法离不开递推方程的求解." 这里Hanoi塔有三个柱子,A\B\C.上面放着五个盘子,要将A柱的盘子全部移到C柱上: 其中规则: 1.小圆盘必须在大圆盘上面. ...
- Hanoi塔(分治法的应用)
1.分治法 分治法的设计思想是将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之. 一般来说,分治算法在每一层递归上都有3个步骤: (1)分解:将问题分解成一系列子问题. ...
- 二 用标准c语言实现hanoi塔问题,天大2016年1二月《数据结构》期末大作业考核要求.doc...
数据结构要求:独立完成,作答时要按照模版信息填写完整,写明题型.题号:作答方式:手写作答或电脑录入,使用学院统一模版(模版详见附件):提交方式:以下两种方式任选其一,手写作答的同学可以将作业以图片形式 ...
- 关于Hanoi塔的实现
关于Hanoi塔的实现 首先,在此之前,我们需要了解一下递归这个东西: 在我看来,递归这个东西就是栈的进出: 向下:进栈 回溯:出栈 在进栈之前标记状态,输入到栈中: #include<bits ...
- java hanoi塔问题_Hanoi塔问题 - 智障的个人空间 - OSCHINA - 中文开源技术交流社区...
Hanoi塔问题--递归方法求解 假设有三个分别命名为x.y.z的圆柱形塔座,在塔座x上插有n个半径大小各不相同,以小到大由上而下编号为1,2,····,n,如图所示.现在要求将X轴上的n个圆盘移至塔 ...
- 【C】C语言之经典算法:河内之塔(1)
文章目录 前言 一.背景 二.思路解析 三.流程图解析 四.代码附上 五.结果 六.参考链接 [C]C语言之经典算法:河内之塔(1) 前言 博主开通了C语言算法专栏,旨在对于有关C语言的一些经典算法的 ...
- C语言经典算法 - 双色河内塔的代码
把内容过程常用的内容片段记录起来,如下的内容内容是关于C语言经典算法 - 双色河内塔的内容,希望能对各位朋友有所好处. #include <stdio.h> void hanoi(int ...
最新文章
- selenium工具的安装
- SAP QM Multiple Specifications的使用II
- xhtml和css概述
- java.security.InvalidKeyException:illegal Key Size
- (1)opencv的安装和遇到的问题
- HALCON示例程序holes.hdev孔洞提取
- oracle基础授权,Oracle基础学习3--Oracle创建用户并授权
- [转载] Python3.X 线程中信号量的使用方法示例
- Python ATM实战
- win7删除桌面计算机图标怎么删除,Windows7电脑桌面ie图标怎么删除不了?
- BUUCTF学习笔记-Easy_Clac
- 星起航:亚马逊全球开店品牌负责人唐浩表示“中国品牌出海的黄金时代已经到来”
- Jmeter - 从入门到精通高级篇 - jmeter使用监视器结果监控tomcat性能(详解教程)
- java 3D学习笔记
- 奇安信2022年营收66.3亿:同比增14% 扣非后净亏3亿
- 神经网络衣服分类器详解(Fashion-MNIST数据集)
- android陀螺仪判断手机旋转方向,unity 陀螺仪判断手机方向
- centos7默认字体_CentOS7安装字体库
- python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
- (超详细)大数据Hadoop之MapReduce组件