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 }
原文:http://www.cnblogs.com/mitrenick/p/4370020.html