Kruskal算法

来源:互联网 发布:淘宝授权店铺是正品吗 编辑:程序博客网 时间:2024/05/17 03:32
#include <iostream>#include <vector>#include <algorithm>using namespace std;#define N 510int pre[N];class edge{public:int u, v, value;};bool cmp(const edge& a, const edge& b) {return a.value < b.value;}vector<edge> v;int unionsearch(int x) {return pre[x] = pre[x] == x ? x : unionsearch(pre[x]);}bool join(int u, int v) {int root1 = unionsearch(u);int root2 = unionsearch(v);if (root1 == root2)return false;pre[root1] = root2;return true;}int main() {int i, num_vertex, num_edge, local_edge, ans;edge tmp;v.clear();cin >> num_vertex >> num_edge;for (i = 1; i <= num_vertex; i++)pre[i] = i;ans = local_edge = 0;for (i = 0; i < num_edge; i++) {cin >> tmp.u >> tmp.v >> tmp.value;v.push_back(tmp);}sort(v.begin(), v.end(), cmp);for (i = 0; i < num_edge && local_edge < num_vertex - 1; i++) if (join(v[i].u, v[i].v)) {local_edge++;ans += v[i].value;}cout << ans << endl;return 0;}        

0 0
原创粉丝点击