汉诺塔------java算法

这其实是一个递归问题,下面是用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

 

 

如果不理解可以看这个老师的课   https://www.bilibili.com/video/BV1Lv4y1e7HL/?p=65&spm_id_from=333.880.my_history.page.click&vd_source=49693d68f3b5f08a9c6550178d174d6eicon-default.png?t=N2N8https://www.bilibili.com/video/BV1Lv4y1e7HL/?p=65&spm_id_from=333.880.my_history.page.click&vd_source=49693d68f3b5f08a9c6550178d174d6e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值