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);
                
            }
        }
    }
  • 相关阅读:
    模板
    kuangbin带你飞
    BZOJ开荒记
    模板
    洛谷
    模板
    [蓝桥杯][2013年第四届真题]危险系数
    数位DP入门题
    备战2019蓝桥杯
    常用的数学符号
  • 原文地址:https://www.cnblogs.com/qyx66/p/12310259.html
Copyright © 2011-2022 走看看