JAVA—咖啡館

          ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

          公告

           

          Locations of visitors to this page
          點擊這里給我發消息 點擊這里給我發消息

          常用鏈接

          留言簿(17)

          隨筆分類(542)

          隨筆檔案(438)

          文章分類(182)

          文章檔案(142)

          新聞分類

          ※→ 【JAVA文檔】

          ※→ 【親人博客】

          ※→ 【休閑娛樂】

          ※→ 【友情鏈接】

          ※→ 【學習網站】

          ※→ 【服務網站】

          ※→ 【著名網站】

          ※→ 【阿里博客】

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          圖中代權的最小樹的問題如下:


          如果N個城市之間(圖中的頂點)要修公路(圖中的邊)以使所有的城市聯通,求怎樣修可以使得公路的總長最小?
          以上問題中的N個城市之間可以用圖中的頂點表示,公路可以圖中的邊表示,公路的長度用邊長表示,公路是雙向的。問題就轉換為在有N個頂點中的雙向代權圖中求得一個最小樹。這里的代權指的邊的長度,這與以前的不代權的最小樹生成算法有很大的區別。


          算法描述如下:


              任選一個節點開始,將該節點標志為已訪問過的節點。也就是最小樹中的節點。并設置為當前節點。
              1 尋找此訪問節點的所有的鄰接頂點,將邊置入優先隊列。鄰接頂點不考慮已標志為訪問的節點,因為它已在結果中。
              2 重復 步驟1 直到沒有新的邊被發現。此時在所有發現的邊中找到最小的邊,將其終點頂點標志為已訪問,放入最小樹中。并設置為當前節點
              3 重復 步驟 1,2,直到邊的隊列中沒有多余的邊,算法結束。

              注意:這里的優先級隊列是個修正過的優先級隊列,每次向該隊列中加入一條新邊時后,會檢查是否有與新邊終點相同的第二條邊的存在,如果有,則刪除邊長較大的邊。因為如果存在這樣的邊說明,有兩條從已訪問過節點到相同目標節點的路徑存在,如果這樣的話只用保留最小的那條邊即可。

          這里的圖采用Graph 圖-鄰接矩陣法 表示。



          算法實際上是作如下操作:


              先準備好一個優先級隊列,里面以邊長為關鍵值存放邊,邊的起點表示已被訪問過的節點,而邊的終點表示未訪問的節點。將某節點標志為訪問過節點。開始算法。
              尋找該訪問過節點的所有邊,并記錄邊長,放入邊優先級隊列中;
              找到所有從已訪問過的節點到未訪問節點的邊中的最小邊;
              將最小邊連接的頂點設置為訪問過,重復以上過程,直到所有節點都變成已訪問。

          主要的類如下:

              Edge:記載邊

              PriorityQ:修正后的優先級隊列

              Vertex:頂點

              Gragh:圖

                  Gragh.mstw():最小樹生成算法

                  Gragh.main():提供簡單測試

          代碼如下:

           

          JAVA代碼

           

          posted on 2008-05-28 15:45 rogerfan 閱讀(419) 評論(0)  編輯  收藏 所屬分類: 【JAVA算法】
          主站蜘蛛池模板: 朔州市| 华蓥市| 汨罗市| 岢岚县| 东城区| 丹凤县| 深圳市| 丰县| 安宁市| 乐昌市| 仙桃市| 措美县| 华宁县| 汤阴县| 渑池县| 灌南县| 富裕县| 满洲里市| 油尖旺区| 丰县| 呼伦贝尔市| 孟津县| 开鲁县| 彰化市| 岳池县| 缙云县| 罗江县| 平果县| 句容市| 江口县| 漳平市| 山阳县| 常山县| 河池市| 山西省| 集贤县| 金寨县| 桂阳县| 九寨沟县| 澄城县| 且末县|