这其实是一个递归问题,下面是用Java对汉诺塔的实现。
源代码:
方式一:
import java.util.Scanner;
/**
*@BelongsProject: javaSenior
*@BelongsPackage: PACKAGE_NAME
*@Author: 48-zj
*@CreateTime: 2023-04-13 22:09
*@Description: TODO
*@Version: 1.0
*/
public class hannuota {
public static void main(String[] args) {
char A,B,C;
int n;
System.out.println("请输入要移动盘子的个数");
Scanner scanner = new Scanner(System.in);
n=scanner.nextInt();
Hh('A','B','C',n);
}
public static void move(char A,char C,int n){
System.out.println("第" + n + "个盘子从" + A + " 移到" + C);
}
public static void Hh(char A,char B,char C,int n){
if(n==1){
move(A,C,n);
}else{
Hh(A,C,B,n-1);
move(A,C,n);
Hh(B,A,C,n-1);
}
}
}
运行结果:
D:\develop-tools\Java\jdk1.8.0_331\bin\java.exe "-javaagent:D:\develop-tools\IDear\idearj\IntelliJ IDEA 2020.3.4\lib\idea_rt.jar=58099:D:\develop-tools\IDear\idearj\IntelliJ IDEA 2020.3.4\bin" -Dfile.encoding=UTF-8 -classpath D:\develop-tools\Java\jdk1.8.0_331\jre\lib\charsets.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\deploy.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\access-bridge-64.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\cldrdata.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\dnsns.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\jaccess.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\jfxrt.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\localedata.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\nashorn.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunec.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunjce_provider.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunmscapi.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunpkcs11.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\zipfs.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\javaws.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jce.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jfr.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jfxswt.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jsse.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\management-agent.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\plugin.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\resources.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\rt.jar;D:\JAVA文件\Ideajavaworkspace\javaSenior\out\production\day02 hannuota
请输入要移动盘子的个数
3
第1个盘子从A 移到C
第2个盘子从A 移到B
第1个盘子从C 移到B
第3个盘子从A 移到C
第1个盘子从B 移到A
第2个盘子从B 移到C
第1个盘子从A 移到C
Process finished with exit code 0
方式二:
import java.util.LinkedList;
import java.util.Scanner;
/**
*@BelongsProject: javaSenior
*@BelongsPackage: PACKAGE_NAME
*@Author: 48-zj
*@CreateTime: 2023-04-13 22:09
*@Description: TODO
*@Version: 1.0
*/
public class hannuota {
static LinkedList<Integer> a = new LinkedList<>();
static LinkedList<Integer> b = new LinkedList<>();
static LinkedList<Integer> c = new LinkedList<>();
static void init(int n){
for(int i=n;i>=1;i--){
a.addLast(i);
}
}
/**
* @Author 04-48-zj
* @Description //TODO
* @Date 23:21 2023/4/14
* @Param
* @param: n 圆盘个数
* @param: a 原来的柱子 a
* @param: b 借的柱子 b
* @param: c 目的柱子 c
* @return void
**/
static void move(int n,LinkedList<Integer> a,LinkedList<Integer> b,LinkedList<Integer> c){
if(n==0){
return;
}
move(n-1,a,c,b);
c.addLast(a.removeLast());//中间
prin();
move(n-1,b,a,c);
}
private static void prin() {
System.out.println("****************************");
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
public static void main(String[] args) {
System.out.println("请输入要移动的盘数");
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
init(n);
prin();
move(n,a,b,c);
}
}
运行结果:
D:\develop-tools\Java\jdk1.8.0_331\bin\java.exe "-javaagent:D:\develop-tools\IDear\idearj\IntelliJ IDEA 2020.3.4\lib\idea_rt.jar=58070:D:\develop-tools\IDear\idearj\IntelliJ IDEA 2020.3.4\bin" -Dfile.encoding=UTF-8 -classpath D:\develop-tools\Java\jdk1.8.0_331\jre\lib\charsets.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\deploy.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\access-bridge-64.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\cldrdata.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\dnsns.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\jaccess.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\jfxrt.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\localedata.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\nashorn.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunec.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunjce_provider.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunmscapi.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\sunpkcs11.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\ext\zipfs.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\javaws.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jce.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jfr.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jfxswt.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\jsse.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\management-agent.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\plugin.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\resources.jar;D:\develop-tools\Java\jdk1.8.0_331\jre\lib\rt.jar;D:\JAVA文件\Ideajavaworkspace\javaSenior\out\production\day02 hannuota
请输入要移动的盘数
3
****************************
[3, 2, 1]
[]
[]
****************************
[3, 2]
[]
[1]
****************************
[3]
[2]
[1]
****************************
[3]
[2, 1]
[]
****************************
[]
[2, 1]
[3]
****************************
[1]
[2]
[3]
****************************
[1]
[]
[3, 2]
****************************
[]
[]
[3, 2, 1]
Process finished with exit code 0