汉诺塔问题 java源码
时间: 2023-11-16 15:07:50 浏览: 42
以下是汉诺塔问题的Java源码实现:
```java
public class HanoiTower {
public static void main(String[] args) {
int nDisks = 3;
doTowers(nDisks, 'A', 'B', 'C');
}
public static void doTowers(int topN, char from, char inter, char to) {
if (topN == 1) {
System.out.println("Disk 1 from " + from + " to " + to);
} else {
doTowers(topN - 1, from, to, inter);
System.out.println("Disk " + topN + " from " + from + " to " + to);
doTowers(topN - 1, inter, from, to);
}
}
}
```
相关问题
汉诺塔问题java代码
下面是汉诺塔问题的Java代码实现:
```
import java.util.Scanner;
public class HanoiTower {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
HanoiTower hanoi = new HanoiTower();
hanoi.move(num, 'A', 'B', 'C');
}
public void move(int num, char a, char b, char c) {
if (num == 1) {
System.out.println(a + "->" + c);
} else {
move(num - 1, a, c, b);
System.out.println(a + "->" + c);
move(num - 1, b, a, c);
}
}
}
```
代码解析:
1. 首先通过Scanner类获取用户输入的盘子数目。
2. 创建一个HanoiTower对象,调用move方法。
3. move方法是递归实现的,当只有一个盘子时,直接将其从a柱移动到c柱;当有多个盘子时,先将上面的n-1个盘子从a柱移动到b柱,再将最下面的一个盘子从a柱移动到c柱,最后将b柱上的n-1个盘子移动到c柱。
n阶汉诺塔问题 java
汉诺塔问题是一个经典的递归问题,它是一个数学问题,源于印度一个古老传说。汉诺塔(Hanoi)问题的具体描述是:有三根相邻的柱子,标号为1、2、3。这三根柱子上分别有n个、n-1个、n-2个……1个大小的盘子,且小的在上,大的在下。现在要把第一个柱子上的盘子移动到第三个柱子上,同时保证大盘子在下,小盘子在上。在移动过程中,要满足下列限制条件:
1.每次只能移动一个盘子;
2.任何时刻都不能将一个大盘子放到小盘子的上面。
以下是n阶汉诺塔问题的Java实现代码:
```java
public class Hanoi {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入盘子数目");
int n = s.nextInt();
hanoi(n,1,2,3);
}
public static void moveUnder(int from, int to) {
System.out.println(from + "移动到" + to);
}
//假设2柱是初始柱,3柱是目标柱
public static void hanoi(int n,int from, int cross, int to) {
if (n == 1) {
moveUnder(from, to);
} else {
//把除了最下面的盘子从1柱借助3柱移动到2柱
hanoi(n-1,from, to, cross);
moveUnder(from, to);
//把上面n-1个盘子从2柱借助1柱子移动到3柱子
hanoi(n-1,cross, from, to);
}
}
}
```