汉诺塔问题

思路:

当有多个盘子时,永远将盘子看作只有两个,位于最下面的一个盘子(A),跟其他的所有盘子(看做一个B),那么只需要先将B先放到中间位置,在将A放到目标位置,最后将A放到目标位置即可。当仅仅只有一个盘子时,直接将盘子从原始位置移动到目标位置。

package DataStruct.Alg;

public class Hanio {
    public static void Hanota(int n,char from,char in,char to)
    {
        //当仅有一个盘子时
       if (n==1)
       {
           System.out.println("第"+n+"个盘子"+"从"+from+"柱子移动到"+to+"柱子");
       }
       //当有多个盘子时,将其看作只有两个盘子,最下面一个,最上面一个
       else {
           //将最上面一个盘子移动到中间in位置
           Hanota(n-1,from,to,in);
           //将最下面的一个盘子移动到to位置
           System.out.println("第"+n+"个盘子"+"从"+from+"柱子移动到"+to+"柱子");
           //将最上面的一个盘子移动到to位置
           Hanota(n-1,in,from,to);
       }
    }

    public static void main(String[] args)
    {
        Hanota(3,'A','B','C');
    }
}

 

原文地址:https://www.cnblogs.com/dloading/p/10745925.html