内容:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
import java.util.Scanner;
public class hannoi {
public static void move(char pos1,char pos3){
System.out.print(pos1+"->"+pos3+" ");
}
public static void hannuota(int x,char pos1,char pos2, char pos3){
if(x==1){
move(pos1,pos3);
}
else{
hannuota(x-1,pos1,pos3,pos2);
move(pos1,pos3);
hannuota(x-1,pos2,pos1,pos3);
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入想算的汉诺塔数目:");
int x=in.nextInt();
char pos1,pos2,pos3;
System.out.println("请输入pos1的名字:");
pos1=in.next().charAt(0);
System.out.println("请输入pos2的名字:");
pos2=in.next().charAt(0);
System.out.println("请输入pos3的名字:");
pos3=in.next().charAt(0);
hannuota(x,pos1,pos2,pos3);
}
}
我们把三个柱子从左到右分为起始站,中转站,终点站。(pos1,pos2,pos3)
在其中解决的方法便是利用递归去解决汉诺塔问题。
我们无论有多少个盘子,如果是1个盘子,是不是直接从起始站到达终点站.
2个盘子则要A->B A->C B->C (2^2-1)
3个盘子则要A->C A->B C->B A->C B->A B->C A->C (2^3-1)
那么我们可以利用递归来解决问题,不过计算的过程会随着盘子数量的增长变得极为缓慢。
以上就是汉诺塔问题的解决方法