分治算法之汉诺塔问题

分治法在每一层递归上都有三个步骤

  1. 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
  2. 解决:若子问题规模较小而容易被解决则直接解决,否则递归的解各个子问题
  3. 合并:将各个子问题的解合并为原问题的解

汉诺塔问题描述

有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

public class HanoiTower {

  public static void main(String[] args) {

  }

  public static void hanoiTower(int num, char a, char b, char c) {
    if (num == 1) {
      System.out.println("第一个盘从" + a + "->" + c);
    } else {
      // 如果我们有n>=2情况,我们总是可以看做是两个盘,1.最下边的一个盘 2.上边所有盘
      // 1.先把最上边的所有盘A -> B,移动过程会用到c
      hanoiTower(num - 1, a, c, b);
      // 2. 把最下边的盘A->C
      System.out.println("第" + num + "个盘从" + a + "->" + c);
      // 3. 把B所有盘从B->C,移动过程使用A
      hanoiTower(num - 1, b, a, c);
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一. 算法介绍: 分治算法,其实就是把一个大问题看成若干个小问题,解决了所有的小问题,那么大问题就解决了,原问题的...
    贪挽懒月阅读 901评论 0 1
  • 一、分治算法概念 “分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问...
    爱小花的小乞丐阅读 1,409评论 4 0
  • 一、分治算法概念 “分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的...
    爱小花的小乞丐阅读 603评论 0 0
  •   相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C...
    雪中夜归人阅读 551评论 0 0
  • 一、递归算法介绍 这篇文章讲的是一个古老而又经典的汉诺塔问题,他是递归算法的一个很好的应用实例。有关递归函数的介绍...
    IT之旅阅读 1,576评论 0 1

友情链接更多精彩内容