zoukankan      html  css  js  c++  java
  • 分治算法讲解与应用

    分治算法

    分治算法的基本步骤

    @author:qyx            2013/6/3

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

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

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

    3)  合并:将各个子问题地解合并为原问题地解

     

    使用分治算法求解汉诺塔问题:

    可以把求解过程分为三步:

    1 如果有一个盘 A->C

    2 如果盘子数超过两个,我们总是可以看做是两个盘,1最下边的盘,2 上面的盘

    1)  先把最上面的盘A->B

    2)  把最下边的盘A->C

    3)  把B塔的所有盘从B->C

    package com.qyx.dac;
    
    public class Hanoitower {
        public static void main(String[] args) {
            hanoitower(5, 'A', 'B', 'C');
        }
        //汉诺塔的移动方法
        //使用分治算法
        public static void hanoitower(int num,char a,char b,char c)
        {
            //如果只有一个盘
            if(num==1)
            {
                System.out.println("第一个盘从"+a+"->"+c);
            }else{
                //如果盘的数量大于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);
                
            }
        }
    }
  • 相关阅读:
    DBCP数据源使用
    实例介绍Cocos2d-x开关菜单
    Material UI:很强大的CSS框架
    stl之hash_multimap
    使用OpenCV滑动条写成的简单调色器,实时输出RGB值
    Android中怎样自己制作su
    华南运维论坛 2015-07-25
    POJ2417 Baby-Step-Gaint-Step 算法
    《网络编程》套接字地址与名字转换
    Hibernate缓存
  • 原文地址:https://www.cnblogs.com/qyx66/p/12310259.html
Copyright © 2011-2022 走看看