博客已轉到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 閱讀(405) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 乐都县| 阿拉善盟| 金寨县| 绵阳市| 阳谷县| 高安市| 德阳市| 贡觉县| 滁州市| 罗山县| 麦盖提县| 武乡县| 巴林左旗| 泰顺县| 宁陵县| 京山县| 商城县| 宜昌市| 莱阳市| 锡林郭勒盟| 云霄县| 东光县| 九寨沟县| 光泽县| 象山县| 城固县| 青州市| 巴里| 沾益县| 三明市| 清镇市| 漾濞| 丹阳市| 沙洋县| 潮州市| 昭苏县| 曲沃县| 巴林左旗| 英德市| 珠海市| 蒙山县|