这其实是一个递归问题,下面是用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 移到CProcess 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
如果不理解可以看这个老师的课 https://www.bilibili.com/video/BV1Lv4y1e7HL/?p=65&spm_id_from=333.880.my_history.page.click&vd_source=49693d68f3b5f08a9c6550178d174d6ehttps://www.bilibili.com/video/BV1Lv4y1e7HL/?p=65&spm_id_from=333.880.my_history.page.click&vd_source=49693d68f3b5f08a9c6550178d174d6e