分治算法讲解与应用

分治算法

分治算法的基本步骤

@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);
            
        }
    }
}
原文地址:https://www.cnblogs.com/qyx66/p/12310259.html