汉诺塔(Hanoi towers)- java

汉诺塔递归算法如下:

  1. 输入的n表示的是环的数量
  2. 假如有三个柱子A,B,C,将A上的n个环移动到C上,始终保持由小到大的次序:
    1. 首先把前面n-1个环从A移动到B上,使用C作为辅助
    2. 然后将最后一个环从A移动到C上
    3. 最后将B上的n-1个环从B移动到C上,使用A作为辅助
public class Hanoi {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        towers(n, 'A', 'C','B');
    }

    /**
     * if n is 1: move A to C
     * 1) move n-1 disks from A to B using C as auxiliary
     * 2) move the last one from A to C
     * 3) move the n-1 disks from B to C using A as auxiliary
     * @param n
     * @param fpeg source disks
     * @param tpeg destination disks
     * @param apeg auxiliary
     */
    static void towers(int n, char fpeg, char tpeg, char apeg){
        String msg = "Move disk from peg %s to peg %s\n";
        if(1==n){
            System.out.printf(msg,fpeg,tpeg);
            return;
        }
        towers(n-1, fpeg, apeg,tpeg);
        System.out.printf(msg,fpeg,tpeg);
        towers(n-1,apeg,tpeg,fpeg);
    }
}

下面是两个例子:

n输入1

汉诺塔(Hanoi towers)- java_第1张图片

n输入2

汉诺塔(Hanoi towers)- java_第2张图片

n输入3

汉诺塔(Hanoi towers)- java_第3张图片

n输入4

汉诺塔(Hanoi towers)- java_第4张图片

 

 

 

 

你可能感兴趣的:(算法)