Kruscal算法的C++实现

来源:互联网 发布:阿里云服务器学生1元 编辑:程序博客网 时间:2024/06/06 04:25
#include<iostream>  #include<vector>  #include<algorithm>  #include<string>  using namespace std;int mst = 0;struct edge {int u, v, w;};edge edges[10000];int index[10000];int find(int x){if (index[x] == x){return index[x];}else returnfind(index[x]);}bool cmp(edge a, edge b){return a.w < b.w;}int kruscal(int n){for (int i = 1; i < n*(n - 1); i++){index[i] = i;}int u, v, findu, findv;for (int i = 0; i < n*(n-1); i++){u = edges[i].u;v = edges[i].v;findu = find(u);findv = find(v);if (findu == findv){continue;}else{mst += edges[i].w;index[findu] = index[findv];}}return mst;}int main(){int n, w;cin >> n;int x = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cin >> edges[x].w;if (edges[x].w != 0){edges[x].u = i;edges[x].v = j;++x;}}}sort(edges, edges + n*(n - 1), cmp);kruscal(n);cout << mst << endl;return 0;system("pause");}