设为首页 加入收藏

TOP

纯C语言:贪心Kruskal算法生成树源码
2014-11-23 20:25:06 来源: 作者: 【 】 浏览:5
Tags:语言 贪心 Kruskal 算法 生成 源码
#include 
  
   
#define Max 100

typedef struct{
         int u;
		 int v;
		 int weight;
}edge;
edge edges[Max];
int nodes[Max];
void interchange(edge* m,edge* n)
{
	edge temp=*m;
	*m=*n;
	*n=temp;

}
int partition(edge array[],int p,int q)
{
	int i,j;
	i=p;
	j=q+1;
	while(1)
	{
		do i++;
		while((array[i].weight
   
    array[p].weight)&&(j!=p)); if(i
    
     >nodenum>>edgenum; cout<<"请输入每条边的起点、终点及权值:"<
     
      >edges[i].u>>edges[i].v>>edges[i].weight; } for(i=1;i<=nodenum;i++) nodes[i]=0; quicksort(edges,0,edgenum-1); for(i = 0; i < edgenum ; i++) { m = edges[i].u; n = edges[i].v; safe = 0; if(nodes[m] == 0 &&nodes[n] == 0){ nodes[m] = flag; nodes[n] =flag; flag++; safe = 1;//a safe edge } else { if(nodes[m] == 0 ||nodes[n] == 0 ) { if(nodes[m] == 0 ) nodes[m] = nodes[n]; else nodes[n]=nodes[m]; safe = 1;//a safe edge } else if(nodes[m] != nodes[n]) { for(j = 1; j <= nodenum; j++) { if((nodes[j] == nodes[m] || nodes[j] == nodes[n])&&(j!=m&&j!=n)) { nodes[j] = flag; } } nodes[m]=flag; nodes[n]=flag; flag++; safe = 1;//a safe edge } } if(safe == 1){//reserve a safe edge edges[presult].u = m; edges[presult].v = n; edges[presult].weight = edges[i].weight; presult++; } if(presult == nodenum-1 ){//found mst break; } } cout<<"Print the result:"<
      
       
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇纯C语言:贪心部分背包问题源码 下一篇纯C语言:贪心Prim算法生成树问题..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: