汉诺塔问题解决方法
该问题就是把除了最下面一层的盘子,上面的n-1个盘子当成一个整体
这样一来问题就转化为有两个盘子,三个柱子的问题,
- 第一步就是把上面的盘子放到中转的盘子上面
- 第二步把最后一个盘子放到目标柱子上
- 第三步,把中转柱子上面的盘子全部转移到目标柱子上
package jianzhioffer;
import java.util.Arrays;
public class hannoi {
public static void main(String[] args)
{
HanNuo(10, 'a', 'b', 'c');
System.out.println();
}
//汉诺塔问题解决方法
// 该问题就是把除了最下面一层的盘子,上面的n-1个盘子当成一个整体
// 这样一来问题就转化为有两个盘子,三个柱子的问题,
// 第一步就是把上面的盘子放到中转的盘子上面
// 第二步把最后一个盘子放到目标柱子上
// 第三步,把中转柱子上面的盘子全部转移到目标柱子上
//汉诺塔的层数,最初的柱子,中转柱子,目标柱子
static void HanNuo(int n, char a, char b, char c)
{
if (n == 1) //是递归的终止条件
{
System.out.println("将盘子"+n+"从"+a+" ----->"+ c); //控制台输出每次操作盘子的动向
}
else
{
HanNuo(n - 1, a, c, b); //将a柱子上的从上到下n-1个盘移到b柱子上
System.out.println("将盘子"+ n+"从 "+a+ "-----> "+c);
HanNuo(n - 1, b, a, c); //将b柱子上的n-1个盘子移到c柱子上
}
}
}