汉诺塔游戏规则理解讲解视频推荐:有趣的汉诺塔游戏怎么玩?把大象放冰箱里一共分几步?_哔哩哔哩_bilibili

假设有A,B,C三个塔,A塔有N块原配,目标是把A盘的全部圆盘转移到C盘中,那么我们就需要把A塔顶部的N-1块盘转移到B盘,再将第N块盘从A塔转移到B塔,则完成所有移动。递归思想,把一个大的问题,不断分解成无数个小问题。

视频中的总结:

代码:

创建一个脚本 ,开始编写代码

想创建一个结构体MoveStep 为我们后面使用列表来记录结果

public struct MoveStep
{public int diskindex;//当前圆盘的索引,自上而下:n->0public string from;//起始位置public string to;//目标位置public  MoveStep(int index,string fromPole,string toPole)//结构体赋值{diskindex = index;from = fromPole;to = toPole;}//ValueType.ToString()为系统默认函数 若要重写要使用override关键字 public override string ToString(){return $"[{diskindex}] {from}->{to}";}}

定义一个接口来规范我们类的行为

//接口定义协定,规范类的行为
//实现该协定的任何class或struct 必须提供接口中定义的成员实现。接口可以为成员定义默认实现
public interface ISolve
{List<MoveStep> Solve(int disNum);
}

最后在类中定义函数,递归。

关于Move(int index,string form,string to,string by)函数

如果该盘的索引(从0开始)为total-1时 ,即为最小盘的时候,递归结束点,将该结果from(起始塔的位置),to(目的地塔的位置)记入下来

Move(index+1,from,by,to):若我们想要移动第index盘,那么我们首先需要将index+1盘移动到by的位置,因为index盘需要移动到to的位置

data.Add(new MoveStep(index,from,to))将index+1盘从from移动到by之后,我们就需要将index盘从from移动to盘,将结果记入下来

Move(index+1,by,to,from);之前我们将index+1盘移动到了by,现在我们就需要将index+1盘从by移动回to盘

public class Demo1 : ISolve
{int total ;//盘的总数List<MoveStep> data = new List<MoveStep>();//定义链表 记录数据public List<MoveStep> Solve(int disNum){data.Clear();total = disNum;Move(0, "A", "C", "B");return data;}void Move(int index,string from,string to ,string by){if(index==total-1){data.Add(new MoveStep(index, from, to));return;}Move(index + 1, from, by, to);data.Add(new MoveStep(index, from, to));Move(index+1, by, to, from);}

eg,一共三个盘,三个塔A,B,C

1.首先Move(0,"A","C","B");我们想要y将最底下,最大的盘(0)从A移动到C

2.然后我们发现想要移动0号盘,那么我首先需要将0号盘上面的盘从A移动到B塔先,所以再次调用函数Move(0+1,"A","B","C");

3.然后我们又发现想要移动1号盘,我们需要先把1号盘上的2号盘给移动了先,因为1号盘需要移动到B的位置,所以我们需要将2号盘放到C塔,再次调用函数,Move(1+2,"A","C","B")

4.此时 2=total-1 ,因为2号盘是最小盘,所以直接将2号盘移动到C塔,使用data.Add()记录下数据

  1. 然后回到第三步,此时,我们刚刚把2号盘移动到C塔,所以我们可以把1号盘移动到B塔

6.我们再将2号盘移动回B塔Move(1+1,"C","B","A")

7.回到2步,此时我们可以移动0号盘,data.add(new MoveStep(0,"A","C"))

8.此时我们要将1号盘从B塔移动到C塔,Move(0+1,"B","C","A");然后发现想要移动1号盘就得移动2号盘

以此类推,总结,但我们想要将0号盘移动到C塔时,我们首先需要将n盘上的所有盘移动到B塔,然后将0号盘移动到C塔,再将B塔上的所有盘移动到C塔。

Unity 汉诺塔Hannota笔记相关推荐

  1. C语言递归函数——汉诺塔问题笔记

    C语言递归函数--汉诺塔问题笔记 学C的时候老师根本没讲过递归,当时自己也没把它当回事,但是递归在算法中的地位实在太重要了.于是翻了翻C课本上的递归,书上讲的不多,但是一个经典的汉诺塔问题就让我伤透了 ...

  2. python汉诺塔问题输入层数输出整个移动流程_python实现汉诺塔方法汇总

    学习python遇到的第一个问题:汉诺塔问题的实现.首先是不知道什么是汉诺塔问题,然后是不知道怎么实现.于是百度了下,结果如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵 ...

  3. python实现汉诺塔程序

    # 汉诺塔思想笔记# 认识汉诺塔的目标:把A柱子上的N个盘子移动到C柱子# 递归的思想就是把这个目标分解成三个子目标# 子目标1:将前n-1个盘子从a移动到b上# 子目标2:将最底下的最后一个盘子从a ...

  4. 汉诺塔python代码解释_Python-汉诺塔原理分析

    最近在"廖雪峰的官方网站"学习Python,遇到汉诺塔递归问题百思不得其解,先是百度了汉诺塔原理,然后查看了别人的写的文章,通过整理汇总,希望能够帮助其他人理解. 汉诺塔原理:(来 ...

  5. Unity自学之汉诺塔(2)——构建场景

    s@[TOC]Unity自学之汉诺塔(2)--构建场景 Unity自学之汉诺塔(2)--构建场景 上一篇说了一下以汉诺塔为目标的基本思考,和想到的开发中会遇到的问题,现在正是开始动手了. 游戏场景 很 ...

  6. Python数据结构与算法笔记(二):递归介绍及汉诺塔问题

    递归 内容介绍 func1和func2没有结束条件. 图解func递归过程: 长框代表func3,窄框代表print.函数执行过程是从上至下. 长框代表func4,窄框代表print.函数执行过程是从 ...

  7. 算法笔记 —— 汉诺塔详解

    文章目录 一.问题来源 二.小游戏体验 三.思路分析 四. 程序实现 一.问题来源 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号X.Y.Z),在 ...

  8. FishC笔记—23,24 讲 递归:这帮小兔崽子,汉诺塔

    本期内容详解: 斐波那契数列的两种实现方式: 迭代的方式: def fab(n): n1 = 1 n2 = 1 n3 = 1 if n < 1: n = int(input('输入有误,请重新输 ...

  9. 简洁笔记-Java数据结构基础(5.递归和斐波那契数列、汉诺塔)

    什么是递归 递归简单来说就是方法调用自己 例子1: 从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山.. 例子2:美女拿着自己的照片, ...

最新文章

  1. linux中文件记录的时间参数,【Linux】stat命令查看文件的三个时间参数
  2. [转]汇编语言的准备知识--给初次接触汇编者 2
  3. java改成c语言专业名词解释,求助大神!!!JAVA转换成C语言
  4. python excel数据分析实战_一次完整的数据分析实战!仅用4步,效率吊打Excel和Python...
  5. 保险极客CTO叶晖谈企业团体险的星辰大海
  6. 9 Characteristics of Free Software Users
  7. win7+ubuntu双系统干净删除ubuntu
  8. 服务端_多面手之服务端测试
  9. vba替换字符串中的字符_R语言 | 字符串替换
  10. linux 下strstr函数,Linux中strchr与strstr函数实现。
  11. 如何到top5%?NLP文本分类和情感分析竞赛总结
  12. 异常点检测isolationforest
  13. 小孔成像总结_初中物理150条知识点总结,非常珍贵!
  14. Android设备上一张图片的显示过程
  15. markdown的搬砖汇总
  16. The Open Group中国首届线上大会 专场三亮点解读
  17. 高通平台读取USB ID
  18. 我的世界服务器控制台发消息,我的世界控制台指令大全 使用起来超方便
  19. 雷林鹏分享:PHP date() 函数
  20. 墨画子卿第四章第2节:如意随心

热门文章

  1. 局域网找不到其它电脑
  2. python txt文件常用读写操作
  3. 手机怎样转换php格式,手机视频格式转换方法适合所有手机视频格式转换|如何转换手机视频格式...
  4. 【原创】Moon在2005的辉煌
  5. 实现轮播模拟点击事件
  6. 还可以这么玩:盘点iOS 11中Siri的12项新功能
  7. 为什么现在一些年轻人放弃缴纳社保?
  8. Linux下强制关闭程序
  9. 考研数据结构之数组(5.1)——练习题之移动数组所有非零元素到数组前端(C表示)
  10. word文档表格后面的空白页怎么删除?