kruskal算法c语言,贪心Kruskal算法生成树C实现代码

#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

do j--;

while((array[j].weight>array[p].weight)&&(j!=p));

if(i

interchange(&array[i],&array[j]);

else

break;

}

interchange(&array[p],&array[j]);

return j;

}

void quicksort(edge array[],int p,int q)

{

int j;

if (p

{

j=partition(array,p,q);

quicksort(array,p,j-1);

quicksort(array,j+1,q);

}

}

void main()

{

int i,j,m, n, nodenum, edgenum,safe,cost=0,flag=1 ;

int presult = 0;

cout<

cin>>nodenum>>edgenum;

cout<

for(i = 0; i < edgenum; i++)

{

cin>>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<

cout<

for(i = 0; i < presult; i++)

{

cost=cost+edges[i].weight;

cout<

}

cout<

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值