1. 程式人生 > >[Java] javaGUI實現最小生成樹

[Java] javaGUI實現最小生成樹

前一陣子看到新人被踢,身為小白的我瑟瑟發抖
之前發了三個帖子,違規了兩個,但是為了在這裡活下去。
我還是舔著臉來了。
這篇推文主要介紹的是用Prim和Kruskal演算法實現最小生成樹,同時介面顯示實現過程。採用的java技術點主要包括:
        1.IO流讀取txt檔案,獲取所用資料;讀取圖片,為主頁新增title。
        2.javaGUI中Jframe視窗和Jpanel面板的基本引數設計以及Graphics畫筆畫出點與距離等資料。        3.List<Object>集合,用來儲存邊的物件

      上圖是此專案的包結構:1.com.kruskal:        Edge.java:邊的類,含有屬性包括邊的開始點begin,邊的結束點end,邊的權值weight.
        Kruskal.java:主要實現Kruskal演算法的類
        KruskalMap:用來實現Kruskal演算法的介面
2.com.prim:        Prim.java:實現Prim演算法的類
        PrimMap.java:實現Prim演算法的介面
3.com.paint:        PaintLine:用來畫邊的類
        PaintPoint:用來畫點的類
4.com.res:        ReadRes.java:主要實現讀取txt檔案,返回二維陣列
5.com.test:        MainApp.java:主類,同時含有主介面,用來選擇Prim或Kruskal演算法。
6.JRE System Library:        工程建立時便有,主要存放J2SE的標準jar包。7.JUtil4:        coding過程中匯入的測試包
8.img:        含有工程中所需要的圖片
9.txt:        包含TXT檔案,是工程中的資料來源

接下來提取主要程式碼僅供大家學習參考:


主類的實現及介面展示:
  



    Prim演算法主要實現思想:找到一個點出發,尋找最小連線邊加入這個點,組成一個集合,在找剩下的最小連線邊加入集合...直到找不到最小連線邊。     在這個類中需要提及的是,我們根據點選次數進行遍歷,每次返回需要畫的點和邊進行繪製。
    Kruskal演算法主要實現思想:根據邊的權值排序,從最小邊出發依次遍歷,不成環便加入最小樹...直到找不到最小連線邊。     在這個類中需要提及的是:不同於Prim演算法,這個演算法使用了集合,物件,簡化了程式設計。    public int find(int[] parent, int index) {        while (parent[index] > 0) {
            index = parent[index];        }        return index;    }    這個方法是此演算法的精髓所在,主要用來判斷是否成環,思想就是尋找一條邊的兩個點的終點是否相等,相等便成了環。