汉罗塔解决思想

2022-02-19  本文已影响0人  墨宇暗黑

汉罗塔里面主要体现的是一种分治思想

首先来说一下这个问题,他是说假设有三根柱子A,B,C,A上面有count个从下往上依次从大往小排序的碟子,通过借助B柱子怎样挪移到C柱子,挪移过程中碟子不能出现大的在小的上面

对于这个问题,几个盘子很好解决,盘子多了就不好处理了,他的这个中心思想就是分治算法:

1)在每次挪移过程中都将柱子最下面的碟子和最底下这个碟子上面的看成两个部分
2)如果说A柱子只有一个碟子,那么我们直接挪移到C柱子便可以(也就是A - C)
3)如果大于一个那么我们就需要先将上面的这部分(除了最底下面的一个)挪移到B柱子(这个时候目标柱子将会切换成B,数量也会少一个,也就是next(a,c,b,count-1))
4)那这时将最低下这个柱子挪移到C柱子(也就是a - c)
5)然后再来对B柱子进行操作即可,对B柱子的操作和对A柱子的思考一致就行,那么这个算法需要使用递归在将B柱子上面的移动到C上面只需要把B柱子当成A柱子 (也就是(next(b,a,c,count-1))),A柱子当成B柱子便可以,大致就是这个思路

代码如下

public class HanLuoTaTest {
    public static void main(String[] args) {
        next('a','b','c',3);
    }
    public static void next(char a, char b, char c, int count){
        if(count == 1){
            System.out.println(a + " -> " + c);
        }else {
            next(a,c,b, count-1);
            System.out.println(a + " -> " + c);
            next(b,a,c,count-1);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读