为我写一个贪心算法的程序
时间: 2023-05-11 07:05:10 浏览: 51
好的,以下是一个简单的贪心算法程序,用于求解一个无向图的最小生成树:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Edge {
int u, v, w;
Edge(int u, int v, int w) : u(u), v(v), w(w) {}
};
bool cmp(const Edge& e1, const Edge& e2) {
return e1.w < e2.w;
}
vector<Edge> kruskal(vector<Edge>& edges, int n) {
vector<Edge> mst;
vector<int> parent(n);
for (int i = 0; i < n; i++) {
parent[i] = i;
}
sort(edges.begin(), edges.end(), cmp);
for (const auto& e : edges) {
int pu = parent[e.u], pv = parent[e.v];
if (pu != pv) {
mst.push_back(e);
for (int i = 0; i < n; i++) {
if (parent[i] == pv) {
parent[i] = pu;
}
}
}
}
return mst;
}
int main() {
int n, m;
cin >> n >> m;
vector<Edge> edges;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
edges.emplace_back(u, v, w);
}
auto mst = kruskal(edges, n);
for (const auto& e : mst) {
cout << e.u << " " << e.v << " " << e.w << endl;
}
return 0;
}
```
这个程序实现了 Kruskal 算法,它是一种贪心算法,用于求解一个无向图的最小生成树。