博客已轉(zhuǎn)到HuJinPu 's blog

          http://blog.csdn.net/hujinpu

          首頁 新隨筆 聯(lián)系 聚合 管理
            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維問題轉(zhuǎn)化為n-1維問題,利用遞歸,可以很好的解決此問題

          運行結(jié)果
          將#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 閱讀(390) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 扶沟县| 贵州省| 宁乡县| 普格县| 金湖县| 临清市| 娱乐| 曲周县| 泗阳县| 陈巴尔虎旗| 东方市| 贺兰县| 灌阳县| 平度市| 无锡市| 石河子市| 乌兰县| 林州市| 东城区| 永川市| 大宁县| 洪雅县| 固安县| 清镇市| 卓资县| 修水县| 靖远县| 北安市| 汉沽区| 金溪县| 秦皇岛市| 东海县| 沅江市| 五华县| 玛沁县| 永登县| 千阳县| 湖北省| 沙洋县| 兰溪市| 屏边|