博客已转到HuJinPu 's blog

http://blog.csdn.net/hujinpu

首页 新随笔 联系 聚合 管理
  24 Posts :: 0 Stories :: 25 Comments :: 0 Trackbacks

源程序HanoiTower.java

public   class  HanoiTower  {
    
//  将n个盘从from柱移到to柱,以aux柱为辅助柱
     public   static   void  move( int  n,  char  from,  char  to,  char  aux)  {
        
if  (n  ==   1 {
            
//  仅有一个盘时,直接从from柱移到to柱
            System.out.println( " 将#1盘从  "   +  from  +   "  移到  "   +  to);
        }
  else   {
            
//  将n - 1个盘从from柱移到aux柱,以to柱为辅助柱
            move(n  -   1 , from, aux, to);
            
//  将最下的圆盘从from柱移到to柱
            System.out.println( " 将# "   +  n  +   " 盘从  "   +  from  +   "  移到  "   +  to);
            
//  将n - 1个盘从aux柱移到to柱,以from柱为辅助柱
            move(n  -   1 , aux, to, from);
        }

    }

    
    
public   static   void  main(String[] args)  {
        
//  将4个圆盘从A柱移到C柱,移动时利用B柱为辅助柱
        move( 3 ' A ' ' C ' ' B ' );
    }

}

原则就是要把from柱的所有盘子移到to柱上去
为此将n维问题转化为n-1维问题,利用递归,可以很好的解决此问题

运行结果
将#1盘从 A 移到 C
将#2盘从 A 移到 B
将#1盘从 C 移到 B
将#3盘从 A 移到 C
将#1盘从 B 移到 A
将#2盘从 B 移到 C
将#1盘从 A 移到 C

这里是对以上源程序中move(3'A''C''B')的分析
                                                      
                                                                     move(3'A''C''B')
                                                 
                           move(2'A''B''C')                      #3 A-->C                        move(2'B''C''A')

move(1'A''C''B')     #2 A-->B      move(1'C''B''A')       move(1 'B''A','C')     #2 B-->C    move(1,'A''C''B')
     

                             



           



posted on 2006-10-12 07:35 livahu 阅读(360) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: