`
w582875929
  • 浏览: 2177 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

无聊想起以前面试的时候的河内塔算法,无聊的来看下有没有其他方案

阅读更多

算法描述

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

我的实现

package com.test;

import java.util.ArrayList;
import java.util.List;

/**
 * 河内塔算法
 * 每次将待移塔上的前N-1个盘子看成一个整体依次递归移动
 * @auth wangx
 * @datetime 14-3-19 下午4:46
 */
public class TowerOfHanoi {

    /**
     * 河内塔算法主程序入口
     */
    private static void move(List<Integer> sou, List<Integer> over, List<Integer> tar, int... num){
        int n = sou.size();
        if(num.length != 0)
            n = num[0];
        if(n == 1){
            move(sou, tar);
            return;
        }
        move(sou, tar, over, n-1);
        move(sou, tar);
        move(over, sou, tar, n-1);
    }

    /**
     * 将sou塔上的最上面的盘子移动到tar塔最上面
     */
    private static void move(List<Integer> sou, List<Integer> tar){
        tar.add(0, sou.remove(0));
    }

    public static void main(String[] args) {
        List<Integer> sou = new ArrayList<Integer>(),
        over = new ArrayList<Integer>(),
        tar = new ArrayList<Integer>();
        for(int i=0; i<5; i++){
            sou.add(i);
        }
        System.out.println(sou);
        System.out.println(over);
        System.out.println(tar);
        move(sou, over, tar);
        System.out.println(sou);
        System.out.println(over);
        System.out.println(tar);
    }
}

 

分享到:
评论

相关推荐

    经典常用算法 河内塔

    河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) 数、运算 蒙地卡罗法求...

    经典算法-河内之塔

    历史上经典的问题,计算出做这件事所需要的时间

    河内塔问题的非递归解法

    河内塔问题是一个经典的计算机科学问题,源自于19世纪由法国数学家爱德华·卢卡斯提出的数学游戏。通常我们用递归算法来解决这个问题,但在这里,我们将探讨如何将其转换为非递归算法。 河内塔问题包含3个柱子(A、...

    C语言河内塔游戏源码1.2

    《C语言实现的河内塔游戏源码解析》 河内塔游戏,源自一个古老的印度传说,是一项典型的递归问题,常被用作教授计算机科学中的递归算法。本篇将详细解读用C语言编写的河内塔游戏源码,帮助读者理解其背后的逻辑和...

    hanoi-towers:很酷的河内塔算法可视化

    河内塔算法使用Canvas用Vanilla Javascript编写的酷河内塔算法可视化工具现场演示:什么是河内塔河内塔是一个问题,您需要移动由尺寸减小的磁盘制成的塔。 您有一个额外的塔可以使用。 唯一的规则是您不能将较大尺寸...

    C语言河内塔游戏源码

    《C语言实现的河内塔游戏源码解析》 河内塔游戏,源自一个古老的印度传说,是一项典型的递归问题解决实例。它涉及到三个柱子和一堆大小不一的圆盘,目标是将所有圆盘从一个柱子移动到另一个柱子,每次只能移动一个...

    河内塔demo

    汉诺塔(Hanoi Tower)是一个经典的递归问题,源于19世纪的法国数学家爱德华·卢卡斯提出的一个益智游戏。这个游戏中有三根柱子和一堆大小不一的圆盘,目标是将所有圆盘从第一根柱子(起始柱)移动到第三根柱子...

    汉诺塔河内塔源码C#

    汉诺塔(Hanoi Tower)是一款经典的逻辑游戏,源自法国数学家爱德华·卢卡斯在19世纪末提出的数学问题。在这个游戏中,玩家需要将一堆按照大小顺序排列的圆盘从一个柱子移动到另一个柱子,遵循三个基本规则:每次...

    C语言河内塔游戏

    《河内塔》是一款源自19世纪法国的益智游戏,它通过三根柱子和一堆不同大小的圆盘来展现。游戏的目标是将所有圆盘从第一根柱子(A柱)移动到第三根柱子(C柱),在移动过程中必须遵守以下规则: 1. 每次只能移动一...

    数据结构经典算法大全 如 河内之塔 三色旗 老鼠走迷宫

    数据结构经典算法他全 如 河内之塔 三色旗 老鼠走迷宫 八皇后等等

    汉诺塔算法带UI动画显示

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

    汉诺塔问题的非递归算法

    在这个问题中,有三根柱子,通常标记为A、B、C,以及若干大小不一的圆盘,每个圆盘都比下一个圆盘小。目标是将所有圆盘从柱子A移动到柱子C,每次只能移动一个圆盘,并且任何时候都不能将较大的圆盘放在较小的圆盘之...

    河内塔问题.docx

    河内塔问题,又称汉诺塔游戏,是一个经典的智力挑战,同时也是一种递归问题,源自19世纪由法国数学家Édouard Lucas提出。它包含三根柱子(A、B、C)和若干个大小不一的圆盘,初始状态所有圆盘都在A柱上,按照从小到...

    著名的世界末日问题-河内之塔 java算法实现

    著名的世界末日问题-河内之塔中演示递归算法的应用

    河内塔:一个 MATLAB GUI,用于流行的河内塔益智游戏,具有手动或自动解决方案。-matlab开发

    河内塔的目标是将所有块从最左边的钉子... 嵌入式解决方案算法可证明是最优的,因为它可以以尽可能少的移动来解决具有任意排列的 n 个块的难题。 河内塔解决方案是递归的经典示例。 有关详细信息,请参阅 &lt; http&gt; 。

    河内塔:完成河内塔问题-matlab开发

    河内塔问题,源于19世纪法国数学家爱德华·卢卡斯提出的一个智力游戏,它是一个经典的递归算法问题,旨在通过移动圆盘来将全部圆盘从一根柱子移到另一根柱子上,遵循以下规则: 1. 每次只能移动一个圆盘。 2. 不允许...

    Java汉诺塔(河内塔)演示源代码.

    首先,我们来探讨Java汉诺塔(河内塔)问题。汉诺塔是一个经典的递归算法问题,它包含三根柱子和一堆不同大小的盘子。目标是将所有盘子从第一根柱子移动到第三根柱子,每次只能移动一个盘子,并且任何时候大盘子都不...

    经典算法大全.pdf

    根据提供的文件信息,可以看出本文档是一本关于经典算法的资料,主要针对C语言编程面试,其中包含了一系列经典算法题目和解决方案。在详细的内容中,列出了各种算法的名称以及简要描述,这些算法覆盖了从基础数据...

    数塔问题解决方案

    经典算法数塔问题解决方案 自己思路编写 没有什么难点 仔细阅读就可以看懂

    河内塔:河内基本塔动画程序-matlab开发

    总结来说,这个基于Matlab的河内塔动画程序是一个教育性和娱乐性并重的工具,它通过动态演示将抽象的递归概念具象化,有助于学习者深入理解递归算法和问题解决策略。通过探索和使用这个程序,不仅可以提升编程技能,...

Global site tag (gtag.js) - Google Analytics