无聊想起以前面试的时候的河内塔算法,无聊的来看下有没有其他方案_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 无聊想起以前面试的时候的河内塔算法,无聊的来看下有没有其他方案

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

 2014/3/31 10:10:03  w582875929  程序员俱乐部  我要评论(0)
  • 摘要:算法描述汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。我的实现packagecom.test;importjava.util.ArrayList;importjava.util.List;/***河内塔算法*每次将待移塔上的前N
  • 标签:面试 其他 无聊 面试的 算法

算法描述

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

我的实现

class="java" name="code">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);
    }
}

?

发表评论
用户名: 匿名