zoukankan      html  css  js  c++  java
  • Kruskal算法的实现

     1 #include "stdio.h"
     2 #include "stdlib.h"
     3 struct edge
     4 {
     5     int m;
     6     int n;
     7     int d;
     8 }a[5010];
     9 int cmp(const void *a,const void *b)//按升序排列
    10 {
    11     return((struct edge*)a)->d - ((struct edge*)b)->d;
    12 }
    13 int main(void)
    14 {
    15     int i,n,t,num,min,k,g,x[100];
    16     printf("请输入顶点的个数:");
    17     scanf("%d",&n);
    18     t = n * ( n - 1 ) / 2;
    19     for(i=1;i<=n;i++)
    20         x[i]=i;
    21     printf("请输入每条边的起始端点、权值:
    ");
    22     for(i=0;i<t;i++)
    23         scanf("%d%d%d",&a[i].m,&a[i].n,&a[i].d);//输入每条边的权值
    24     qsort(a,t,sizeof(a[0]),cmp);
    25     min=num=0;
    26         for(i=0;i<t && num < n-1;i++)
    27         {
    28             for(k=a[i].m;x[k]!=k;k=x[k])//判断线段的起始点所在的集合
    29                 x[k]=x[x[k]];
    30             for(g=a[i].n;x[g]!=g;g=x[g])//判断线段的终点所在的集合
    31                 x[g]=x[x[g]];
    32             if(k!=g)//如果线段的两个端点所在的集合不一样
    33             {
    34                 x[g]=k;
    35                 min+=a[i].d;
    36                 num++;
    37                 printf("最小生成树中加入边:%d%d
    ",a[i].m,a[i].n);
    38             }
    39         }
    40     printf("最小生成树的权值为:%d
    ",min);
    41     return 0;
    42 }
  • 相关阅读:
    Android进程启动
    Android 系统Framework
    每日一问 AIDL
    Android性能优化
    Android启动优化
    Android绘制优化
    Android布局优化三剑客#
    android性能优化全方面解析(一)
    Android网络
    Android四大组件
  • 原文地址:https://www.cnblogs.com/niceforbear/p/4531219.html
Copyright © 2011-2022 走看看