问题描述:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方 ,一次只能移动一个盘子。
算法思想:当有一个盘子时,只用把那一个盘子从A移动到C上,当有n个盘子时,先把n-1个盘子从A移动到B上,然后再把最后一个盘子从A移到C上,最后再把那n-1个盘子移动到C上。
只有一个盘子时:
有两个盘子时:
Java代码:
import java.util.*;
public class Main{
public static void hanoi(int n,char A,char B,char C) {
if(n==1) {
move(A,C);
}else {
hanoi(n-1,A,C,B);
move(A,C);
hanoi(n-1,B,A,C);
}
}
public static void move(char A,char B) {
System.out.println("move"+A+"->"+B);
}
public static void main(String args[]) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
hanoi(n,'A','B','C');
}
}