汉诺塔问题简介:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
A B C
思路:
***1.只有一个盘的时候:直接将盘从A->C;
2.当盘数大于如果n>=2时
1) 将盘看成两部分,最下面一个盘为下部分,第1到第n-1个盘为上面部分
2) 将上面部分的盘全部A-B,借助C
3) 然后将最下面那个盘从A->c
4) 最后借助A将B->C
Java代码:
package com.yg.algorithm;/*
分治算法的代表汉诺塔问题
*/
public class HanoiTowers {
public static void main(String[] args) {
hanoiTowers(3,'A','B','C');
}
public static void hanoiTowers(int num, char a, char b, char c) {
if (num == 1) {
System.out.println("第一个盘从" + a + "->" + c);
} else {
//如果n>=2时
//将盘看成两部分,最下面一个盘为下部分,第1到第n-1个盘为上面部分
//将上面部分的盘全部A-B,借助C
hanoiTowers(num - 1, a, c, b);
//然后将最下面那个盘从A->c
System.out.println("第"+num+"个盘从" + a + "->" + c);
//最后借助A将B->C
hanoiTowers(num - 1, b, a, c);
}
}
}