public class Hanoi {
static int count=0;//计算移动完成所需要的移动次数
public static void main(String[] args) {
hanoi(1,1,2,3);
}
/**
*
* @param n圆盘的总个数
* @param a柱子编号,刚开始所有的圆盘按顺序全部放在a上
* @param b最终目标将所有圆盘按顺序放到b上
* @param c辅助柱子
*/
public static void hanoi(int n,int a,int b,int c) {
if(n>0) {
//将上面的n-1块看作一个整体,最下面一块看作一个整体,将n-1块小的按照规则移动到c上,最大的一个移动到b上
hanoi(n-1,a,c,b);
move(a,b);//将a上的圆盘移动到b上
hanoi(n-1,c,b,a);
}
}
/**
* 移动圆盘
* @param a hanoi中的第一个代表的塔座编号
* @param b 第二个代表的塔座编号
*/
public static void move(int a,int b) {
System.out.println((++count)+":塔座"+a+"上的圆盘移动到塔座"+b);
}
}
Hanoi问题java实现
最新推荐文章于 2022-10-13 17:11:00 发布