栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java学习笔记(数据结构与算法13)分治算法解决汉诺塔问题。

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java学习笔记(数据结构与算法13)分治算法解决汉诺塔问题。

目录

分治算法:

汉诺塔问题: 

思路: 

代码: 

结果:


分治算法:

分治算法的基本思想:

将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。

分治算法解题的一般步骤:

(1)分解,将要解决的问题划分成若干规模较小的同类问题;

(2)求解,当子问题划分得足够小时,用较简单的方法解决;

(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

汉诺塔问题: 

将A塔的所有圆盘移动到C塔。

规定

1) 小圆盘上不能放大圆盘

2)在三根柱子之间一次只能移动一个圆盘

 

思路: 

分析发现,我们将n个盘从a移动到c,

需要:

(1)先将n-1个盘从a移动到b,

(2)再将最下面的盘从a移动到c

(3)将b上的n-1个盘从b移动到c

这样,就符合了分治算法的思想,

步骤(1)是一个n变小的原问题,可以理解为分,而步骤(3)是将分得到的结果归并起来,可以理解为治。

而步骤(1)和(3)都可以通过递归实现。

代码: 
package FenZhi;

public class HanNuoTa {
    public static void main(String[] args) {
        solution(3,'A','B','C');
    }
    public static void solution(int Num,char a,char b,char c){
        if(Num==1){
            System.out.println("第1个盘从"+a+"移动到"+c);
        }else{
            solution(Num-1,a,c,b);
            System.out.println("第"+Num+"个盘从"+a+"移动到"+c);
            solution(Num-1,b,a,c);
        }
    }
}

结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/287275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号