汉诺塔问题:假设有从左到右有三个名字分别为x,y,z的塔座, 在塔座x上有n各直径大小各不相同,按照直径从小到大编号为1,2,。。。n的圆盘。现在要求将x轴上的n个圆盘移动到塔座z上,并且按同样的顺序叠排,圆盘移动规则如下

  1. 每次只能移动一个圆盘
  2. 圆盘可以插在任何一个塔座上
  3. 任何时刻小盘都必须在大盘之上

思路如下:n=1的时候,问题最简单,直接把圆盘移动到z就行。当n>1的时候,就需要用y作为辅助塔座,设法将压在n上面的n-1

的圆盘从x移动到y上,则可以把圆盘n移到z上面,再通过上面的办法把y上的圆盘移动到z上面。如何将n-1个圆盘从一个塔座移动到另外一个塔座是一个和原问题一样的问题,只是规模不相同。

这里用vector来保存每一个塔座上的圆盘,当移动圆盘时,一个塔座的vector弹出最后面的元素, 一个塔座将前面弹出的圆盘添加到子集的vector中

 1 /*
 2     author: LaiXingYu
 3       date:2018/5/10
 4 */
 5 /*
 6     para: @n, number of plates, @x, @y, @z, move plates from x to z, via y;
 7 */
 8 void hanoi(int n, vector<int>& x, vector<int>& y, vector<int>& z){
 9     if(n == 1){
10         z.push_back(x.back());
11         x.pop_back();
12         return;
13     }else{
14         hanoi(n-1, x, z, y);     //把n-1个盘子从x经过z移动到y
15         z.push_back(x.back());   //把x剩下的盘子移动到z上
16         x.pop_back();
17         hanoi(n-1, y, x, z);     //把n-1个盘子从y经过x移动到z
18     }
19 }

转载于:https://www.cnblogs.com/mr-stn/p/9022302.html

汉诺塔的实现 c++相关推荐

  1. 汉诺塔(三)_栈的应用

    问题 E: 汉诺塔(三) 时间限制: 3 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北 ...

  2. 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)

    前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...

  3. Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

    1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s== ...

  4. 技术图文:如何实现汉诺塔问题?

    背景 最近在辅导小孩们学习编程,在介绍函数递归时,最典型的就是汉诺塔问题了. 我在这里总结一下,以方便大家的学习. 汉诺塔问题源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在 ...

  5. 汉诺塔问题---小昝

    C语言 #include <stdio.h> void move(char A,char C){printf("%c ---> %c\n",A,C); }void ...

  6. 轻松理解汉诺塔问题(图解java描述)

    引言:(易于理解) 汉诺塔看似简单的几行代码,却蕴含着奇妙的算法.我从我个人学习的角度来说.我一开始理解了原理,但是编码不会编,这也就是所谓的眼高手低.多研究多在IDE(eclipse-java,VS ...

  7. 栈与队列5——汉诺塔问题(方案二)

    题目 汉诺塔问题的基础上,增加限制,必须得经过中间,不能直接从左到右或从右到左,求当塔有N层的时候打印最优移动过程和最优移动总步数 要求 法一:递归法 法二:非递归法,用栈来模拟 解析 法二:非递归法 ...

  8. 栈与队列5——汉诺塔问题

    题目 汉诺塔问题的基础上,增加限制,必须得经过中间,不能直接从左到右或从右到左,求当塔有N层的时候打印最优移动过程和最优移动总步数. 要求 法一:递归法 法二:非递归法,用栈来模拟 解析 法一:主要分 ...

  9. 【项目展示】自己用C语言编写的汉诺塔小游戏

    本文目录 1.前言 2.什么是汉诺塔? 3.项目规格 4.基本思路 5.源代码 6.运行结果 7.感想与心得 8.未来规划 1.前言 昨儿个把自己大一时候写过的五子棋重构了一下,之后就在想着要不把不知 ...

  10. 零基础入门学习Python22-递归2 斐波那契数列和汉诺塔

    数学函数 F(n) = 1 n = 1 F(n) = 1 n = 2 F(n) = F(n-1)+F(n-2) n > 2 问n=20时,F(n)的值是多少??? 迭代实现 def F(n):x ...

最新文章

  1. 六,ESP8266 TCP Client(基于Lua脚本语言)
  2. UIApplication,UIWindow,UIViewController,UIView(layer)
  3. python 数据库中文乱码 Excel
  4. HTML5 Web SQL实现简单的增删改查websql使用方法vue2.0使用websql实现浏览器存储
  5. 产品的国内版和国际版背后的思考
  6. jQuery介绍及各版本介绍(适合新手查看)
  7. 工业数据采集网关的特点及应用场景
  8. 在linux4.19内核下的UPD720201驱动里添加固件下载的代码
  9. 飞猪java怎么样_2021春招面试必看:飞猪/新浪/饿了么内部Java面经手册首次发布...
  10. 泊松分酒 泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。
  11. TinyXml 介绍
  12. ctfshow-命令执行-web37
  13. SpringCloud-3-Ribbon
  14. 中国墨子号卫星首次实现1200公里量子纠缠,震惊国外专家
  15. java定时执行(设置每天几点执行一次)
  16. c4d-界面介绍、1
  17. CSS unicode-range特定字符使用font-face自定义字体
  18. 为什么单精度浮点数的精度是7位
  19. Mofile牵手哪吒
  20. U盘误删除文件?迅龙数据恢复软件轻松找回数据

热门文章

  1. 网络爬虫初步:从一个入口链接开始不断抓取页面中的网址并入库
  2. Oracle 权限介绍及管理
  3. python要和什么一起学_跟哥一起学Python(1) - python简介
  4. CF#1288A Deadline (函数求最值问题)
  5. python自动化从零开始_从零开始的自动化测试框架——Python篇
  6. 中职计算机教师个人自我诊改报告,教师自我诊改报告
  7. 红盟php 解密,php教程_神盾加密解密教程(一)PHP变量可用字符
  8. 命令测试post_性能测试脚本编写之三
  9. webuploader 怎么在react中_另辟蹊径搭建阅读React源码调试环境支持所有React版本细分文件断点调试...
  10. 华为mate40计算机,原来拍摄还能这么玩?华为Mate40 Pro连接电脑+耳机,Vlog输出分分钟...