1.什么是分治算法?

分治算法,字面理解“分而治之”,就是把一个复杂的问题分成两个或者更多的相同或者相似的子问题,再把子问题分成更小的子问题...直到最后子问题可以直接简单求解,原问题的解即子问题的解的合并,这个算法是很多高效算法的基础,如排序算法,傅里叶变换。

2.分治算法的基本步骤

分解:将原问题分解为若干个规模较小,相互独立,与原问题相似相同的子问题

解决:若子问题规模较小而容易被解决则直接解决,否则递归地解决各个子问题

合并:将各个子问题的解合并为原问题的解

3.汉诺塔的分治算法实现

假设有“A”“B”“C” 三个柱子,一开始有5个盘子,把这5个盘子移动到另一个柱子上

package com.company.atguigu.java;
public class hannuoTower {public static void main(String[] args){hannuoTower(5,'A','B','C');}// 汉诺塔的移动方法// 使用分治算法public static void hannuoTower(int num,char a,char b,char c){if(num == 1){System.out.println("第一个盘从" +a + "->" +c);}else{// 如果我们有n >= 2的情况,我们总可以看成两个盘// 最下面一个盘,上面一个盘// 先把最上面的盘A->B,移动过程会使用到channuoTower(num-1,a,c,b);// 把最下面的盘A->CSystem.out.println("第" + num + "个盘从" + a + "->" +c);// 把B塔的所有盘从B->C,移动过程中使用到A塔hannuoTower(num -1,b,a,c);}}
}

运算结果:

第一个盘从A->C
第2个盘从A->B
第一个盘从C->B
第3个盘从A->C
第一个盘从B->A
第2个盘从B->C
第一个盘从A->C
第4个盘从A->B
第一个盘从C->B
第2个盘从C->A
第一个盘从B->A
第3个盘从C->B
第一个盘从A->C
第2个盘从A->B
第一个盘从C->B
第5个盘从A->C
第一个盘从B->A
第2个盘从B->C
第一个盘从A->C
第3个盘从B->A
第一个盘从C->B
第2个盘从C->A
第一个盘从B->A
第4个盘从B->C
第一个盘从A->C
第2个盘从A->B
第一个盘从C->B
第3个盘从A->C
第一个盘从B->A
第2个盘从B->C
第一个盘从A->C

get!!

分治算法求解汉诺塔问题相关推荐

  1. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  2. 经典算法之汉诺塔求解问题

    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64 ...

  3. C语言——生存期和存储类型、递归、递归求解汉诺塔、快速排序

    目录 一.生存期和存储类型 1.生存期 2.存储类型 3.自动变量(auto) 4.寄存器变量(register) 5.静态局部变量(static) 6.static 和 extern 二.递归 1. ...

  4. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

  5. 栈和队列----用栈求解汉诺塔问题

    用栈求解汉诺塔问题 汉诺塔问题比较经典,现在修改一下汉诺塔游戏的规则:规定不能直接从左移动到右,也不能直接从右移动到左,必须经过中柱,求解当塔有N层的时候,打印最优移动过程和最优移动总步数. 可以采用 ...

  6. 用栈来求解汉诺塔变形问题

    package stackAndQueue;import java.util.Stack;/*** 用栈来求解汉诺塔问题:HanoiStack[3]* * [问题描述]:将汉诺塔游戏(小压大)规则修改 ...

  7. Java 通过递归求解汉诺塔问题 源码 经典递归问题讲解

    汉诺塔问题描述:有三根柱子 A.B.C ,在A从下向上按照从大到小的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子. 分析:为 ...

  8. python汉诺塔游戏_python求解汉诺塔游戏

    本文实例为大家分享了python求解汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.问题定义 百度百科定义:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.据说大梵天创造世界的时候做了三 ...

  9. java实现求解汉诺塔问题(提示, 使用递归)

    实现代码: 求解汉诺塔问题(提示, 使用递归) 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从 ...

最新文章

  1. 在Web.config或App.config中的添加自定义配置
  2. 字符串匹配算法 KMP
  3. 【C 语言】文件操作 ( 配置文件读写 | 业务逻辑 | 接口设计 )
  4. 一个空值_java匠人手法优雅的处理空值
  5. python数据统计 矢量图_用python中的矢量化解决方案计算max draw down
  6. Java 9抢先体验:与JShell的动手实践– Java REPL
  7. 生物智能与AI——关乎创造、关乎理解(下)
  8. 冒泡排序,选择排序,插入排序
  9. minus出错matlab,请求帮忙指点MATLAB中的语法错误
  10. Linux如何更改主机名
  11. React:引入echarts绘制图表
  12. win7注册表无法修改计算机名称,win7注册表无法修改怎么办 win7注册表不能更改怎么办...
  13. AD15画板的总流程
  14. PivotGridControl与ChartControl控件结合使用(一)
  15. Android之开发者模式配置全面(解决打开了开发者模式,程序还是不能烧进手机问题)
  16. matlab中fmincon函数求最大值,matlab fmincon函数用法
  17. 单层感知机(Single Layer Perceptron)详解
  18. win7计算机系统减肥,怎样给win7瘦身 win7瘦身攻略
  19. Vue 九宫格抽奖实现
  20. 齐次方程与非齐次方程

热门文章

  1. 图解微信小程序---获取电影列表
  2. xftp无法连接到虚拟机CentOS7
  3. 小程序如何进行页面之前的传值
  4. C# VS2013生成的exe文件修改图标
  5. [80后][程序员][日记][06/18/2010] 周末
  6. 戴德金--连续性和无理数--我自己做的中文翻译第7页
  7. 2021Matlab遗传算法谢菲尔德大学遗传工具箱的使用
  8. JavaScript之点击按钮进行网页跳转
  9. java nio keyiterator.remove()_Java SelectionKey.isValid方法代碼示例
  10. vue3 + video-player 播放视频