[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) {