汉诺塔问题java代码_汉诺塔问题编程算法

汉诺塔问题java代码_汉诺塔问题编程算法代码:packagecom.wangyq.datastructrue.arithmetic;importjava.util.Arrays;importjava.util.Stack;/***分治算法-汉罗塔*/publicclassDivideAndConquer{publicstaticvoidmain(String[]args){//定义一个汉罗塔TowerofHanoitowerofHanoi=newT

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

代码:

package com.wangyq.datastructrue.arithmetic;

import java.util.Arrays;
import java.util.Stack;

/** * 分治算法-汉罗塔 */
public class DivideAndConquer { 
   
    public static void main(String[] args) { 
   
        //定义一个汉罗塔
        TowerofHanoi towerofHanoi = new TowerofHanoi(4);
        towerofHanoi.show();
        towerofHanoi.hannoi();
    }

}

class TowerofHanoi { 
   
    int tier = 0;
    Stack column1 = new Stack();
    Stack column2 = new Stack();
    Stack column3 = new Stack();

    TowerofHanoi(int tier) { 
   
        this.tier = tier;
        //初始化汉罗塔
        for (int i = tier; i > 0; i--) { 
   
            column1.push(i);
        }
    }

    /** * 打印汉罗塔 */
    public void show() { 
   
        System.out.println("汉罗塔:");
        System.out.println("第一根柱子" + Arrays.toString(column1.toArray()));
        System.out.println("第二根柱子" + Arrays.toString(column2.toArray()));
        System.out.println("第三根柱子" + Arrays.toString(column3.toArray()));
    }


    public void hannoi() { 
   
        move(tier, column1, column2, column3);
    }

    /** * 汉罗塔移动 */
    public void move(int tier, Stack stack1, Stack stack2, Stack stack3) { 
   
        if (tier == 1) { 
   
            //只有一个直接移上去
            stack3.push(stack1.pop());
            show();
        } else { 
   
            //
            move(tier - 1, stack1, stack3, stack2); //将n-1个在A柱子的盘子通过c柱子移动到B柱子
            stack3.push(stack1.pop());
            show();                                       //将A柱子上编号为n的盘子移动到c柱子
            move(tier - 1, stack2, stack1, stack3);  //将在B柱子的n-1盘子通过A柱子移动到C柱子
        }
    }
}

结果:
汉罗塔:
第一根柱子[4, 3, 2, 1]
第二根柱子[]
第三根柱子[]
汉罗塔:
第一根柱子[4, 3, 2]
第二根柱子[1]
第三根柱子[]
汉罗塔:
第一根柱子[4, 3]
第二根柱子[1]
第三根柱子[2]
汉罗塔:
第一根柱子[4, 3]
第二根柱子[]
第三根柱子[2, 1]
汉罗塔:
第一根柱子[4]
第二根柱子[3]
第三根柱子[2, 1]
汉罗塔:
第一根柱子[4, 1]
第二根柱子[3]
第三根柱子[2]
汉罗塔:
第一根柱子[4, 1]
第二根柱子[3, 2]
第三根柱子[]
汉罗塔:
第一根柱子[4]
第二根柱子[3, 2, 1]
第三根柱子[]
汉罗塔:
第一根柱子[]
第二根柱子[3, 2, 1]
第三根柱子[4]
汉罗塔:
第一根柱子[]
第二根柱子[3, 2]
第三根柱子[4, 1]
汉罗塔:
第一根柱子[2]
第二根柱子[3]
第三根柱子[4, 1]
汉罗塔:
第一根柱子[2, 1]
第二根柱子[3]
第三根柱子[4]
汉罗塔:
第一根柱子[2, 1]
第二根柱子[]
第三根柱子[4, 3]
汉罗塔:
第一根柱子[2]
第二根柱子[1]
第三根柱子[4, 3]
汉罗塔:
第一根柱子[]
第二根柱子[1]
第三根柱子[4, 3, 2]
汉罗塔:
第一根柱子[]
第二根柱子[]
第三根柱子[4, 3, 2, 1]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182891.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bypasswaf之盲注

    0x00前言前面讲到了联合查询如何过waf,那么今天给大家来讲讲盲注怎么去,bypasswaf。这里还是以xx狗为例。0x01与waf的对抗我们来试试常规的注入思路。'单引号不

    2021年12月11日
    58
  • eBPF 学习路径总结「建议收藏」

    eBPF 学习路径总结「建议收藏」BPF学习路径总结•Feiskyhttps://feisky.xyz/posts/2021-01-06-ebpf-learn-path/目录1.为什么要学习BPF2.BPF应该怎么学习2.1BPF书籍2.2BPF学习样例3.BPF资料汇总3.1介绍系列3.2深入系列3.3Linux资源作者简介:狄卫华,趣头条资深架构师,主要关注云原生相关领域,目前聚焦在BPF技术及实践.1.为什么要学习BPF可以先从ebpf.i.

    2022年9月21日
    4
  • 【c#】枚举

    【c#】枚举【c#】枚举

    2022年4月25日
    46
  • 第五章:activiti流程分流判断,判断走不同的任务节点

    第五章:activiti流程分流判断,判断走不同的任务节点第五章:activiti流程分流判断,判断走不同的任务节点

    2022年4月23日
    51
  • DHCP协议原理及应用[通俗易懂]

    DHCP协议原理及应用[通俗易懂]DHCP:动态主机配置协议   TCP/IP协议想要运行正常的话,网络中的主机和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了这些配置信息主机/路由器才能提供/使用特定的网络服务。   主机信息的必要元素有:IP地址、子网掩码、DNS服务器IP地址   TCP/IP协议配置主机信息主要有三种方法: 1.手动配置 2.动态获取 3.根据特定算法计算。

    2022年5月10日
    66
  • lmdb数据库的读取与转换(二) —— 数据集操作

    lmdb数据库的读取与转换(二) —— 数据集操作数据集的lmdb将数据集转换成lmdb实际上就是一条条地将img和label的key-value形式写进lmdb中importcv2importlmdbimportnumpyasnpenv=lmdb.open(‘./data/train/CVPR2016’)txn=env.begin()forkey,valueintxn.cursor():#遍历print(key)#print(value)env.close()遍历lmdb中..

    2022年9月25日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号