汉诺塔问题

Posted ssdut_yrp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔问题相关的知识,希望对你有一定的参考价值。

对于上面把问题抽象出来的那段描述,对于n > 1的时候,又可以抽象(换成“总结”这个词会没那么大压力吗?)出这3步:
(1)、将底盘n以上的环(n-1个)移动到B
(2)、将底盘n从A移动到C
(3)、将B上的环(n-1个)移动到C
其中第1步和第3步的步数是一样的,因为环的数量一样(n-1个),只是目标的柱子不同而已。

public class TowerApp 
    /**
     * @param args
     */
    static int nDisks=3;
    public static void main(String[] args) 
        // TODO Auto-generated method stub
        doTowers(nDisks,'A','B','C');
    
    /**
     * @param topN 要移动盘子的数目
     * @param from 源塔座
     * @param inter 中间塔座
     * @param to  目标塔座
     */
    public static void doTowers(int topN,char from,char inter,char to)
        if(topN==1)
            System.out.println("Disk1 from "+from+" to "+to);
        
        else
            doTowers(topN-1,from,to,inter);
            System.out.println("Disk"+topN+" from "+from+" to "+to);
            doTowers(topN-1,inter,from,to);
        
    

以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(java语言描述)递归实现——汉诺塔问题

java数据结构复习02

SHOI2008 汉诺塔

汉诺塔问题

汉诺塔问题

汉诺塔