您的位置:首页 > 编程语言 > Java开发

Java经典算法——汉诺塔问题

2017-03-25 23:39 211 查看
题目:

最大圆盘在最底,其余依次叠上去,依次减小,现要求将圆盘逐个移动到另一根杆上,规定一次只能移动一个,且小的只能放到大的上面。

import java.util.Scanner;

public class Hanoi {

private static int count;

public static void main(String[] args) {
int n;
Scanner sc=new Scanner(System.in);

System.out.print("请输入圆盘数量:");
n=sc.nextInt();

count=0;//表示移动的步数
hanoi(n,'X','Y','Z');//三根杆分别为'X','Y','Z'

sc.close();
}

private static void hanoi(int n, char x, char y, char z) {

/*
当n=1时,将圆盘从第一杆移动到第三杆;

当n>1时,把圆盘看作两部分,第一部分是最底层的圆盘,第二部分就是除了最底层之外的所有圆盘的总和,
第一步:将第一部分的圆盘从第一杆移动到第二杆;
第二步:将第二部分的圆盘从第一杆移动到第三杆
第三步:将第一部分的圆盘从第二杆移动到第三杆
*/

if(n==1){
System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
}else{
hanoi(n-1,x,z,y);
System.out.println("第"+(++count)+"次移动,从"+x+"移动到"+z);
hanoi(n-1,y,x,z);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: