最小生成树Kruskal算法朴素版 C语言实现
来源:互联网 发布:owncloud windows安装 编辑:程序博客网 时间:2024/05/16 04:37
最小生成树Kruskal算法朴素版 C语言实现
标签:最小生成树
Prim算法
参考博客
并查集基础及练习
#include <stdio.h>#include <algorithm>using namespace std;#define maxn 20typedef struct{ int x, y; int w;}edge;edge e[maxn];int rank_[maxn], father[maxn], sum;int cmp(edge a, edge b){ //按权值非降序排序(相同则按x坐标) if(a.w == b.w) return a.x < b.x; return a.w < b.w;}void make_set(int x){ father[x] = x; rank_[x] = 0;}int find_set(int x){ return x != father[x] ? find_set(father[x]) : father[x];}void union_set(int x, int y, int w){ sum += w; if(x == y) return ; if(rank_[x] > rank_[y]) father[y] = x; else{ if(rank_[x] == rank_[y]) rank_[y]++; father[x] = y; }}int main(){ int n, x, y, i; char cx, cy; freopen("kruskal.txt", "r", stdin); scanf("%d", &n); getchar(); for(i = 0; i < n; i++){ scanf("%c%c %d", &cx, &cy, &e[i].w); getchar(); e[i].x = cx -'A', e[i].y = cy - 'A'; make_set(i); //0对应于A } sort(e, e + n, cmp); //for(i = 0; i < n; i++) printf("%c-%c : %d\n", e[i].x + 'A', e[i].y + 'A', e[i].w); //printf("\n"); sum = 0; for(i = 0; i < n; i++){ x = find_set(e[i].x), y = find_set(e[i].y); if(x != y){ printf("%c-%c : %d\n", e[i].x + 'A', e[i].y + 'A', e[i].w); union_set(x, y, e[i].w); } } printf("total: %d\n", sum); return 0;}
数据文件:
实验结果:
阅读全文
0 0
- 最小生成树Kruskal算法朴素版 C语言实现
- 图的最小生成树Kruskal算法朴素版(C++)
- 最小生成树Prim算法朴素版 C语言实现
- 最小生成树Prim算法朴素版 C语言实现
- 最小生成树Prim算法朴素版 C语言实现
- 最小生成树kruskal算法并查集版 C语言实现
- 最小生成树kruskal算法并查集版 C语言实现
- C语言实现图的Kruskal最小生成树算法
- 最小生成树Kruskal算法C语言
- 最小生成树问题中Kruskal算法和Prim算法的C语言实现
- 最小生成树—— Prim算法 ▪ Kruskal算法C语言实现
- 数据结构之---C语言实现最小生成树之kruskal(克鲁斯卡尔)算法
- 数据结构(C实现)------- 最小生成树之Kruskal算法
- Kruskal最小生成树算法代码实现(c++)
- 最小生成树Prim算法朴素版 C语言实…
- 图的最小生成树Prim算法朴素版(C++)
- Java实现最小生成树Kruskal算法
- Kruskal算法实现最小生成树
- 464. 整数排序 II
- Linux(Ubuntu)安装和完美卸载Apache详细教程和配置多域名、端口映射
- 隐私政策
- Java系列书籍推荐下载
- java获取properties配置文件最简单方法
- 最小生成树Kruskal算法朴素版 C语言实现
- Python学习Day1
- Git 初次学习笔记
- 图论入门测试之后。
- 洛谷2915 usaco08nov 奶牛混合起来 Mixed Up Cows
- 上传项目到Github
- mybatis 动态sql
- CSS3(十七)
- Java类初始化顺序