最小生成树 并查集 最短路径
来源:互联网 发布:php mktime函数 编辑:程序博客网 时间:2024/05/22 01:48
#include<stdio.h>#include<stdlib.h>struct edge{int u;int v;int w;//为了方便排序这里穿件一个结构体来存储边的关系}e[10];int n,m;int f[10]={0},sum=0,count=0;//并查集需要得到的一些变量//f数组大小根据实际情况来设置,要比n的最大值大1//排序int cmp(const void *a,const void *b){ return (((struct edge *)a)->w-((struct edge *)b)->w);}int getf(int u){if(f[u]==u)return u;else{f[u]=getf(f[u]); return f[u];}}int merge(int u,int v){int t1,t2;t1=getf(u);//寻找祖先结点t2=getf(v);//寻找祖先结点if(t1!=t2)//判断两个点是否在同一个集合中{f[t2]=t1;return 1;//如果祖先结点的值不同说明不在一个集合中}elsereturn 0;//相同 在一个集合中}int main(){int i;//读入n和m,n表示顶点个数, m表示边的条数scanf("%d%d",&n,&m);//读入边,这里用一个结构体来存储边的关系for(i=1;i<=m;i++)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);qsort(e,m+1,sizeof(e[0]),cmp);//并查集初始化for(i=1;i<=n;i++){f[i]=i;}//kruskal算法核心部分for(i=1;i<=m;i++){if(merge(e[i].u,e[i].v)==1)//两个点不在一个集合中{count++;//加上边的个数 sum=sum+e[i].w;//计算最小的和}if(count==n-1)//知道选用了n-1跳变之后退出循环break;}for(i=1;i<=m;i++){printf("%d %d %d\n",e[i].u,e[i].v,e[i].w);}printf("%d\n",sum);//输出最小路径return 0;}
0 0
- 最小生成树 并查集 最短路径
- 最小生成树,最短路径
- 最小生成树和最短路径
- 最小生成树,最短路径算法
- 最小生成树和最短路径
- 最小生成树和最短路径
- 最小生成树&&最短路径
- 最小生成树&最短路径
- 最小生成树和最短路径
- 最小生成树和最短路径
- 【USACO】安全路径(计数/求和以及最值小探讨)(最有生成树之最短路径树,LCA,最值问题,并查集)
- 并查集&最小生成树、最短路
- 最小生成树 最短路 并查集
- [BZOJ1576]安全路径travel-最短路径树+并查集
- 51nod 1366 贫富差距 (并查集+最短路径)
- 图的周游,最短路径和最小生成树
- POJ1797 Heavy Transportation (最短路径/最小生成树kruskal)
- 最小生成树,最短路径的基本算法
- solr5.1安装 tomcat单机版
- 第八周 项目1-3 扩展重载运算符的功能(进化版)
- Zxing图片识别 从相册选二维码图片解析总结
- Struts2的输入校验流程(学习记录)
- Linux下使用strace的例子
- 最小生成树 并查集 最短路径
- 正确使用 Android 性能分析工具——TraceView
- 的规范化个抠脚如果天会发言稿
- 共赏人间四月天 户外厨房打造明媚春宴
- JDK动态代理实现原理
- javascript中的面向对象
- iOS简单好看的动画
- Poi + JFreeChart 操作Excel总结。
- eclipse配置tomcat