`
rayln
  • 浏览: 431346 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

汉诺塔算法

    博客分类:
  • Java
 
阅读更多
import java.util.*;


public class HanoiTask {
    class Tower<E> {
       private int number;
       private String name;
       private Stack<E> stack = new Stack<E>();
       
       public Tower(int number,String name) {
           this.number = number;
           this.name = name;
       }
              
       public int getNumber() {
           return number;
       }
 
       public String getName() {
           return name;
       }
 
       public Stack<E> getStack() {
           return stack;
       }
       
    }
    
    class Tray {
       private int number;
       private String name;
       
       public Tray(int number,String name) {
           this.number = number;
           this.name = name;
       }
       
       public int getNumber() {
           return number;
       }
       
       public String getName() {
           return name;
       }
       
       public String toString() {
           return name;
       }
    }
    
    public static <T>  void hanoi(int num,Tower<T> from,Tower<T> middle,
           Tower<T> to, List<String> result) {
       if(num == 1) {
           move(from,middle,to, result);
       } else {
           hanoi(num-1,from,to,middle, result);
           move(from,middle,to, result);
           hanoi(num-1,middle,from,to, result);
       }
    }
    
    private static <E> void move(Tower<E> from,Tower<E> middle ,Tower<E> to, List<String> result) {
       E tray = from.getStack().pop();
       to.getStack().push(tray);
       result.add(from.getName()+to.getName());
    }
	
    public static List<String> transferFromAtoC(int n) {
    	List<String> result = new ArrayList<String>();
    	HanoiTask t = new HanoiTask();
    	Tower<Tray> from = t.new Tower<Tray>(1, "A");
        Tower<Tray> middle = t.new Tower<Tray>(2, "B");
        Tower<Tray> to = t.new Tower<Tray>(3, "C");
        
        int num = n;
        for (int i = num; i >0; i--) {
            Tray tray = t.new Tray(i,i+"");
            from.getStack().push(tray);
        }
        hanoi(num, from, middle, to, result);
        return result;
    }
    
}
分享到:
评论

相关推荐

    C++ Builder 汉诺塔算法动态演示系统

    在C++ Builder环境下,利用C++语言和线程技术来动态演示汉诺塔算法,可以帮助用户直观地理解和学习这个算法。 首先,我们来深入理解汉诺塔问题。它包括三个柱子和一堆大小不一的圆盘,初始时所有圆盘都在第一个柱子...

    c语言 汉诺塔 算法

    这是个汉诺塔程序,在调试的时候,输入的数字最好不要大于15,因为每大一个数 所得的结果的步骤都会多一倍。如果你有耐心等待结果的话除外。汉诺塔是在欧洲 流行的一种游戏,有a,b,c三个竿。a竿上有若干个由大到小的...

    数据结构 汉诺塔算法

    ### 数据结构与汉诺塔算法详解 #### 一、汉诺塔问题背景及定义 汉诺塔(Tower of Hanoi)是一种源自法国的数学游戏,由埃德华·卢卡斯于1883年发明。它由三根杆子及不同大小的圆盘组成,所有圆盘最初都放在同一根...

    汉诺塔算法简单实现步骤

    汉诺塔的算法流程 仅供参考,本程序,可以实现N个盘子的汉诺塔排序,并在屏幕上显示操作步骤

    汉诺塔算法演示程序

    汉诺塔(Hanoi Tower)算法,又称为巴黎塔问题,是计算机科学中一个经典的递归问题。这个算法源于一个古老的印度传说,涉及到三个柱子和一堆大小不一的圆盘。目标是将所有圆盘从一个柱子移动到另一个柱子,每次只能...

    汉诺塔算法带UI动画显示

    汉诺塔 (又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放...

    c语言汉诺塔算法,递归,非递归

    汉诺塔问题的解决方案通常采用递归算法来实现,这是因为问题本身具有自然的递归性质。下面我们将详细探讨递归解法: **递归算法解释:** 假设我们有n个圆盘,我们可以按照以下步骤将它们从柱子A移动到柱子C,利用...

    汉诺塔问题算法以及实现

    ### 汉诺塔问题算法及其实现 #### 概述 汉诺塔问题是一个经典的递归算法案例,它不仅在计算机科学领域有着广泛的应用,同时也被用来教授递归思想的基础知识。这个问题最早由法国数学家Édouard Lucas于1883年提出,...

    汉诺塔算法教学源码,给出了计算结果和塔盘移动过程

    描述中的"给出了计算结果和塔盘移动过程"意味着这个源码不仅实现了汉诺塔算法,还可能包含可视化界面,能够动态显示每个步骤,帮助初学者更好地理解这个过程。通过这样的可视化演示,用户可以直观地看到每个圆盘的...

    汉诺塔算法的递归与非递归的C以及C++源代码.doc

    汉诺塔算法的递归与非递归实现 汉诺塔算法是程序设计中的经典递归问题,来源于印度古老的传说。问题的描述是:有三根金刚石的棒,第一根上面套着 64 个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,...

    汉诺塔算法 和游戏实例

    知道汉诺塔的同学,有想知道其中原理的,可以看看,一个小游戏,需要源码的发邮件至:568954956@qq.com,VS2010

    汉诺塔算法的可视化程序

    这个程序是汉诺塔算法的可视化软件,如果在学习这个算法但是始终搞不清时可以使用这个软件帮助理解。

    archive_VC++汉诺塔算法.zip.zip

    在这个名为"archive_VC++汉诺塔算法.zip.zip"的压缩包中,包含了一个VC++编写的汉诺塔算法实现,以及一个名为"output.txt"的文件,可能是运行程序后的输出结果或日志。 首先,我们来详细解释汉诺塔问题。汉诺塔游戏...

    汉诺塔算法 C++

    汉诺塔算法 C++ 有截图 结果如下: 请输入盘子数:4 各步骤如下: A--&gt;B A--&gt;C B--&gt;C A--&gt;B C--&gt;A C--&gt;B A--&gt;B A--&gt;C B--&gt;C B--&gt;A C--&gt;A B--&gt;C A--&gt;B A--&gt;C B--&gt;C 总步骤数为:15 Press any key to continue

    汉诺塔算法演示PPT

    一步步演示汉诺塔算法的执行流程

    汉诺塔算法演示

    汉诺塔算法的演示,比较简单

    VC++汉诺塔算法.7z

    在VC++环境中实现汉诺塔算法,我们可以利用C++语言的特性,特别是递归函数,来解决这个问题。这个压缩包文件“VC++汉诺塔算法.7z”可能包含了一个完整的VC++项目,用于演示如何用C++编程实现汉诺塔游戏的解决方案。 ...

    汉诺塔算法分析实验报告

    - **M 根柱子的汉诺塔问题**:当柱子数量M为3时,可以使用经典的汉诺塔算法,即 pow(2,n) - 1 的公式计算最少移动次数。对于M不等于3的情况,使用递归策略,通过计算不同分割点的最少移动次数并找到最小值。 - **...

Global site tag (gtag.js) - Google Analytics