Java经典算法——汉诺塔问题

题目:

最大圆盘在最底,其余依次叠上去,依次减小,现要求将圆盘逐个移动到另一根杆上,规定一次只能移动一个,且小的只能放到大的上面。


import java.util.Scanner;

public class Hanoi {

    private static int count;

    public static void main(String[] args) {
        int n;
        Scanner sc=new Scanner(System.in);

        System.out.print("请输入圆盘数量:");
        n=sc.nextInt();

        count=0;//表示移动的步数
        hanoi(n,'X','Y','Z');//三根杆分别为'X','Y','Z'

        sc.close();
    }

    private static void hanoi(int n, char x, char y, char z) {

        /*
        当n=1时,将圆盘从第一杆移动到第三杆;

        当n>1时,把圆盘看作两部分,第一部分是最底层的圆盘,第二部分就是除了最底层之外的所有圆盘的总和,
                第一步:将第一部分的圆盘从第一杆移动到第二杆;
                第二步:将第二部分的圆盘从第一杆移动到第三杆
                第三步:将第一部分的圆盘从第二杆移动到第三杆
         */


        if(n==1){
            System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
        }else{
            hanoi(n-1,x,z,y);
            System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
            hanoi(n-1,y,x,z);
        }

    }

}


你可能感兴趣的:(Java经典算法题)