java数据结构和算法------图(最小生成树Prim)

 1 package iYou.neugle.graph;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 //创建图过程的代码在图的那篇博文中,此处直接使用
 7 public class Prim {
 8     private MyGraph1 graph;
 9     private List<Integer> v = new ArrayList<Integer>();// 待处理集合
10     private List<Integer> u = new ArrayList<Integer>();// 已处理集合
11 
12     public Prim(MyGraph1 graph) {
13         this.graph = graph;
14     }
15 
16     private void Init() {
17         for (int i = 0; i < this.graph.getGraph().maxNum; i++) {
18             v.add(i);
19         }
20     }
21 
22     // Prim核心方法
23     public void PrimCore() {
24         this.Init();
25         u.add(v.get(0));
26         v.remove(0);
27         System.out.println("最小生成树为--------");
28         int weight = 0;
29         while (u.size() < this.graph.getGraph().maxNum) {
30             int minw = Integer.MAX_VALUE;
31             int v1 = 0, v2 = 0, r = 0;
32             for (int i = 0; i < this.u.size(); i++) {
33                 int a = this.u.get(i);
34                 for (int j = 0; j < this.v.size(); j++) {
35                     int b = this.v.get(j);
36                     int currentw = this.graph.getGraph().edge[a][b];
37                     if (currentw > 0 && currentw < minw) {
38                         minw = currentw;// 权值
39                         v1 = a;// 第一条边
40                         v2 = b;// 第二条边
41                         r = j;// 在v中待删除元素
42                     }
43                 }
44             }
45             System.out.println((v1 + 1) + "->" + (v2 + 1));
46             weight += minw;
47             this.u.add(v2);
48             this.v.remove(r);
49         }
50         System.out.println("----------------");
51         System.out.println("最小生成树的权值为: " + weight);
52     }
53 
54     //主函数
55     public static void main(String[] args) {
56         MyGraph1 graph = new MyGraph1(5, 0);
57         graph.CreateMaxtrixGraph(1, 2, 2);
58         graph.CreateMaxtrixGraph(1, 3, 5);
59         graph.CreateMaxtrixGraph(1, 5, 3);
60         graph.CreateMaxtrixGraph(2, 4, 4);
61         graph.CreateMaxtrixGraph(3, 5, 5);
62         graph.CreateMaxtrixGraph(4, 5, 2);
63         graph.OutPutMaxtrixGraph();
64         Prim prim = new Prim(graph);
65         prim.PrimCore();
66     }
67 }
  1 2 3 4 5 
1 0 2 5 0 3 
2 2 0 0 4 0 
3 5 0 0 0 5 
4 0 4 0 0 2 
5 3 0 5 2 0 
最小生成树为--------
1->2
1->5
5->4
1->3
----------------
最小生成树的权值为: 12
posted @ 2015-07-23 09:23  iYou  阅读(438)  评论(0编辑  收藏  举报