汉诺塔游戏

汉诺塔游戏

游戏简介

如图:游戏开始时应该有三条柱子,而我们需要做的就是把A柱子上的所有原盘转移到另一个指定的柱子C上,在此过程中原盘需要满足小原盘在大圆盘的上面。
汉诺塔游戏

实例

如图,此时需要把A柱上的所有原盘放到C上的步骤依次应该为:
A->C
A->B
C->B
A->C
B->A
B->C
A->C
汉诺塔游戏

代码思路

实例1:n=1时,A->C

实例2:n=2时,A->B,A->C,B->C

实例3:n=3时,A->C,A->B,C->B,A->C,B->A,B->C,A->C

如上例,当A柱上有n个盘子时,我们需要把这n-1个盘子通过C柱挪到B柱上,再把A柱上最大的那个盘子挪到C上,然后把B柱上这n-1个盘子通过A挪到C上,此时把n-1看成新的n,B柱就是新的A柱,把B柱上的n-1个盘子通过A柱挪到C上,也就是把新A柱上的新n个盘子通过新B柱挪到C上。
如图:
汉诺塔游戏
则在n>1时,所有的操作可以看成3步
把n个盘子从A通过B挪到C;目的
只需要把n-1个盘子从A通过C挪到B; 第一步
A上剩余的最后一个盘子再挪到C; 第二步
然后把这n-1个盘子从B通过A挪到C; 第三步,此时与刚开始一样,重复操作(此时只是目的的n变成了现在的n-1,从A通过B变成了现在的从B通过A,所以只需要修改n的值,再将A、B柱子的名字互换继续循环执行即可,知道n为1时。再直接挪到C柱即可)

代码

public class Hanoi {
    public static void move(char x,char y){
        System.out.println(x + "->" + y);
    }
    public static void func(int n,char pos1,char pos2 ,char pos3){
        if (n == 1){
            move(pos1,pos3);
            return;
        }
        func(n - 1,pos1,pos3,pos2);
        move(pos1,pos3);
        func(n - 1,pos2,pos3,pos1);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入A柱上的原盘数");
        int n = sc.nextInt();
        func( n , 'A','B','C');
    }
}

测试截图

实例1:
汉诺塔游戏

实例2:
汉诺塔游戏

实例3:
汉诺塔游戏

上一篇:杭电OJ-1058


下一篇:U3D Shader_图片模糊处理