Kruskal算法
来源:互联网 发布:扇形建筑算法 编辑:程序博客网 时间:2024/06/05 05:06
#include"ljjz.h"typedef struct edgedata{ int beg; int end; int length;}edge;void QuickSort(edge edges[],int left,int right)//按边的权值进行快排{ edge x; int i,j,flag=1; if(left<right) { i=left; j=right; x=edges[i]; while(i<j) { while(i<j&&x.length<edges[j].length)j--; if(i<j)edges[i++]=edges[j]; while(i<j&&x.length>edges[j].length)i++; if(i<j)edges[j--]=edges[i]; } edges[i]=x; QuickSort(edges,left,i-1); QuickSort(edges,i+1,right); }}void GetEdge(Mgraph g,edge edges[])//得到边信息{ int i,j,k=0; for(i=0;i<g.n;i++) for(j=0;j<i;j++)//边有路径且不是自身 if(g.edges[i][j]!=0&&g.edges[i][j]<FINITY) { edges[k].beg=i; edges[k].end=j; edges[k++].length=g.edges[i][j]; }}void kruskal(Mgraph g){ int i,j,k=0,ltf1; int cnvx[M]; edge edges[M*M]; edge tree[M]; GetEdge(g,edges); QuickSort(edges,0,g.e-1); for(i=0;i<g.n;i++)//每个顶点的连通分量为其编号 cnvx[i]=i; for(i=0;i<g.n-1;i++)//树中有g.n-1条边 { //找到属于两个连通分量最小的边 while(cnvx[edges[k].beg]==cnvx[edges[k].end]) k++; tree[i]=edges[k];//最小边插入进树中 ltf1=cnvx[edges[k].end];//记录当前最小边的终点 for(j=0;j<g.n;j++)//两个连通分量合并成一个连通分量 if(cnvx[j]==ltf1)//终点的连通分量和起点的连通分量一致 cnvx[j]=cnvx[edges[k].beg]; k++;//之前找到的边的两端都是在同一个连通分量 } for(i=0;i<g.n-1;i++) printf("%c---%c%6d\n",g.vexs[tree[i].beg],g.vexs[tree[i].end],tree[i].length);}int main(){ Mgraph m ,*pm=&m; creat(pm,"DATA-LJJZ",0); kruskal(m); return 0;}
0 0
- Kruskal算法
- Kruskal算法
- Kruskal算法
- kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- kruskal算法
- kruskal算法
- kruskal算法
- Kruskal算法
- kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- Kruskal算法
- java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
- maven jar
- intent.putExtra()方法参数详解
- 深度剖析函数四个部分(返回值,参数,函数名,函数体)
- js中几种实用的跨域方法原理详解
- Kruskal算法
- python2.7_中文显示
- IDoc Inbound Process
- hibernate配置
- (hdu step 2.3.7)Last non-zero Digit in N!(阶乘最后一位非零位)
- TransactionScope的使用
- android 三种定位方式
- AJAX即时返回后台值
- Linux命令学习:awk