最小生成树c语言
以下是使用C语言实现最小生成树的示例代码,采用的是Kruskal算法:
```c
include <>
include <>
define MAX_VERTEX_NUM 100
typedef struct {
int vertex[MAX_VERTEX_NUM];
int weight[MAX_VERTEX_NUM];
int num;
} Graph;
typedef struct {
int vertex[MAX_VERTEX_NUM];
int num;
} UnionFind;
void initUnionFind(UnionFind uf, int n) {
uf->num = n;
for (int i = 0; i < n; i++) {
uf->vertex[i] = i;
}
}
int findUnionFind(UnionFind uf, int x) {
if (uf->vertex[x] != x) {
uf->vertex[x] = findUnionFind(uf, uf->vertex[x]);
}
return uf->vertex[x];
}
void unionSet(UnionFind uf, int x, int y) {
int rootX = findUnionFind(uf, x);
int rootY = findUnionFind(uf, y);
if (rootX != rootY) {
uf->vertex[rootX] = rootY;
uf->num--;
}
}
Graph kruskal(Graph g) {
UnionFind uf;
initUnionFind(&uf, );
Graph result = {0};
= - 1;
for (int i = 0; i < ; i++) {
for (int j = i + 1; j < ; j++) {
if ([i] < [j]) {
[] = [i];
[] = [i];
unionSet(&uf, i, j);
++;
c编程网站 } else if ([i] == [j]) {
unionSet(&uf, i, j);
}
}
}
return result;
}
```
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论