package com.someusefuldesign.demo;
/*假设有A B C三个柱子移动的顺序为:
* */
public class Hanoi {
static int count = 0;
public void hanoi(int n,String from,String depend,String to ){
//这里的n是指每个柱子上盘子的编号,从上到下为1-n
if(n == 1){
move(from,to);
}else{
/**先把初始柱子的前n-1个盘子借助目标柱子移动到辅助柱子上**/
hanoi(n-1,from,to,depend);//把初始柱子上n-1个放到辅助柱子上
/**然后把初始柱子上最后一个最大的盘,放到目标柱子上*/
move(from,to);//这里只是打印出来信息
/**然后借助初始柱子(把初始柱子当成辅助柱子),把之前辅助柱子上的n-1个盘,放到目标柱子上*/
hanoi(n-1,depend,from,to); //再把辅助上的放到目标柱子上
/**由于是递归,反复调用,知道n=1,到递归出口*/
}
}
public void move(String from,String to){
System.out.println("from " + from + " to " + to);
count++;
}
public static void main(String[] args) {
/**定义ABC三个柱子,A为初始柱子,B为辅助柱子,C为目标柱子*/
Hanoi hanoi=new Hanoi();
hanoi.hanoi(3, "A", "B", "C");
System.out.println("一共移动了"+count+"步");
}
}
汉诺塔
最新推荐文章于 2025-05-03 15:21:04 发布