最小生成树 Prim算法

 1 int n;
 2 int road[MAXN][MAXN];
 3 int dis[MAXN];
 4 bool vis[MAXN];
 5 int prim() {
 6     memset(vis, 0, sizeof(vis));
 7     for(int i = 0; i < n; i++) dis[i] = INF;
 8     dis[0] = 0;
 9     int ans = 0;
10     for(int i = 0; i < n; i++) {
11         int tmp = INF, idx = 0;
12         for(int j = 0; j < n; j++) {
13             if(!vis[j] && dis[j] < tmp) {
14                 tmp = dis[j];
15                 idx = j;
16             }
17         }
18         vis[idx] = 1;
19         ans += tmp;
20         for(int j = 0; j < n; j++) {
21             if(!vis[j] && dis[j] > road[idx][j]) {
22                 dis[j] = road[idx][j];
23             }
24         }
25     }
26     return ans;
27 }

 

posted @ 2015-03-26 20:52  Mite  阅读(139)  评论(0)    收藏  举报