并查集求最小生成树
来源:互联网 发布:大富豪棋牌源码3.4.1 编辑:程序博客网 时间:2024/06/04 01:28
什么是并查集请点这里
prime算法求最小生成树,本程序的题目条件来源于这篇文章
之前写过prime算法求最小生成树的代码,昨天知道了并查集算法后,就用并查集算法再写一遍求最小生成树的题目。
# include <stdio.h># include <stdlib.h># include <algorithm>//读本程序之前 先看一下prime算法求最小生成树那个文章链接,看题目要求int node[100];using namespace std;typedef struct //代表边的结构体{ int i,j,a; //i为起始节点 j为终止节点 a为边长}vex;void CreateGraph(vex v[100],int n){ int i,j,k=1; FILE *fp; for(i=0;i<n;i++)//边的起始点与结束点赋值,因为是从文件中的矩阵图读入数据,所以可选择的边定为36条 { for( j =0;j<n;j++) { v[i*6 +j].j = j;//终止节点为j v[i*6 +j].i = i; //起始节点为i } } if((fp = fopen("zrxprim.txt","r"))==NULL) { printf("can not open file\n"); } for(i=0;i<n;i++)//边赋初值 { for(j=0;j<n;j++) { fscanf(fp,"%d",&(v[i*6+j].a));//给每条边的长度赋值 } } if(fclose(fp)) { printf("can not close the file\n"); } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%6d ",v[i*6+j].a);//输出图的矩阵 } printf("\n"); } printf("有向图的存储结构建立完毕!\n");}bool comp(vex a,vex b) //根据边长从小到大排序{ return a.a<b.a;}int find(int i){ return i==node[i] ? i :find(node[i]);}void main(){ vex v[100]; CreateGraph(v,6); //固定有6个节点 for(int i = 0;i<6;i++) { node[i] = i; } int bian = 0; int sum = 0; sort(v,v+6*6,comp); printf("start_vex stop_vex\n"); for(int i = 0;bian < 6-1;i++) { if(find(v[i].i) != find(v[i].j)) { node[find(v[i].j)] = find(v[i].i); printf("%6d %6d %6d\n",v[i].i,v[i].j,v[i].a); bian++; sum+=v[i].a; } } printf("最小生成树长度:%d",sum);}
阅读全文
0 0
- 并查集求最小生成树
- 并查集求最小生成树
- 1083. Networking(并查集求最小生成树)
- kruskal+并查集求最小生成树
- 利用并查集求最小生成树
- 并查集写最小生成树
- POJ 3723 Conscription (Kruskal并查集求最小生成树)
- 并查集与最小生成树
- 并查集模版&最小生成树
- 最小生成树kruscal+并查集
- 并查集+最小生成树_HDU_1102
- 并查集中的最小生成树
- CODEVS 1003 并查集缩点+最小生成树
- bzoj1050(最小生成树 并查集)
- 最小生成树与并查集
- 最小生成树与并查集
- 最小生成树+并查集+ kruskal
- 并查集 最小生成树
- hdu1300 pearls 【dp】
- 对称的二叉树
- Jzoj4625 树
- 400和500错误的统一处理
- linux IO 内核参数调优
- 并查集求最小生成树
- final关键字的几种用法
- RecycleView布局
- how to improve deep learning performance
- nginx 服务器相关命令
- 51Nod 1019 逆序数(归并法求逆序数)
- [bitset]#515. 「LibreOJ β Round #2」贪心只能过样例
- 【NOJ】[1004] 万圣节派对
- html百分比实现边框而不挤出