算法描述
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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); } }
?