博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Hanoi算法
阅读量:7003 次
发布时间:2019-06-27

本文共 1077 字,大约阅读时间需要 3 分钟。

java经典算法——河内算法(Hanoi)

有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,设移动次数为H(n)。

原理:

  当n=1时,H(1)=1,即A—>C; 

  当n=2时,H(2)=3,即A—>B,A—>C,B—>C; 
  当n>2时,可以将第1个盘子到第n-1个盘子看成一个整体为①,这样就仍为两个盘子: 
  第一步:①从A—>B:共H(n-1)步; 
  第二步:n 从A—>C:共1步; 
  第三步:①从B—>C:共H(n-1)步. 

public static void main(String args[]) throws IOException {        int n;        BufferedReader buf;        buf = new BufferedReader(new InputStreamReader(System. in ));        System.out.print("请输入盘数:");        n = Integer.parseInt(buf.readLine());        Hanoi hanoi = new Hanoi();        hanoi.move(n, 'A', 'B', 'C');    }    public void move(int n, char a, char b, char c) {        //第二步: 最底下的1个盘子,从A移到C        if (n == 1) {            System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);        } else {            //第一步:把上面(n-1)个盘子从A移到B            move(n - 1, a, c, b);            System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);            //第三步:把(n-1)个盘子从B移到C            move(n - 1, b, a, c);        }    }

 转载自:

转载于:https://www.cnblogs.com/llfy/p/9322524.html

你可能感兴趣的文章