一、学习内容
1.Hanoi塔:如图所示有三根柱子,在一根柱子上从下往上按照大小顺序摞着n片圆盘。圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
2.实现步骤:
①要把A柱子上的前n-1个移动到B柱子上;
②直接把A柱子上的最后一个移动到C柱子上;
③把B柱子上的n-1个柱子通过柱子A移动到柱子C上。
package datastructure.tree;
/**
* Hanoi tower.
*
* @author Fan Min minfanphd@163.com.
*/
public class Hanoi {
/**
*********************
* Move a number of plates.
*
* @param paraSource
* The source pole.
* @param paraIntermedium
* The intermediary pole.
* @param paraDestination
* The destination pole.
* @param paraNumber
* The number of plates.
*********************
*/
public static void hanoi(char paraSource, char paraIntermediary, char paraDestination,
int paraNumber) {
if (paraNumber == 1) {
System.out.println(paraSource + "->" + paraDestination + " ");
return;
} // Of if
//第一步:将paraSource上的(n-1)个圆盘通过paraDestination移动到paraIntermedium;
hanoi(paraSource, paraDestination, paraIntermediary, paraNumber - 1);
//第二步:将paraSource上的最后一个圆盘移动到paraDestination;
System.out.println(paraSource + "->" + paraDestination + " ");
//第三步:将paraIntermedium上的(n-1)个圆盘通过paraSource移动到paraDestination。
hanoi(paraIntermediary, paraSource, paraDestination, paraNumber - 1);
}// Of hanoi
/**
*********************
* The entrance of the program.
*
* @param args
* Not used now.
*********************
*/
public static void main(String args[]) {
hanoi('a', 'b', 'c', 4);
}// Of main
}// Of class Hanoi
二、实现结果