一、程序设计思想:
从左到右 A B C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面.有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号peg1 、peg2 、peg3,peg1上放置需要移动的盘,peg2用作移动辅助盘,peg3当做移动后的盘。
设置两个函数Hanoi(int n,String peg1,String peg2,String peg3)递归进行操作;move(String c1,String c2)用来输出移动步数。
二、程序流程图:
三、源程序:
package homework2;
import java.util.Scanner;
public class Hanoi {
static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int n;
System.out.println("输入你想移动的盘子数目:");
Scanner in=new Scanner(System.in);
n=in.nextInt();
System.out.println("移动"+n+"个盘子需要的步数为:");
hanoi(n,"peg1","peg2","peg3");
System.out.println("总共需要移动"+count+"步");
}
public static void hanoi(int n,String peg1,String peg2,String peg3){
//将peg 1借助peg2,移动到peg3
if(n==1) {
move(peg1,peg3);
count++;
}
else {
hanoi(n-1,peg1,peg3,peg2);
move(peg1,peg3);
hanoi(n-1,peg2,peg1,peg3);
count=count+1;
}
}
public static void move(String c1,String c2) {
System.out.println(c1+"-->"+c2);
}
}
四、实现结果截图: