zoukankan      html  css  js  c++  java
  • 最小生成树kruskal算法、

    克鲁斯卡尔(kruskal)

     1 //kruskal算法生成最小生成树、
     2 
     3 //对边集数组Edge结构的定义
     4 typedef struct
     5 {
     6     int begin;
     7     int end;
     8     int weight;
     9 }Edge; 
    10 void Minispantree_kruskal(Mgraph G)
    11 {
    12     int i,n,m;
    13     Edge edges[MAXEDGE];        //最大边数 、 
    14     int parent[MAXVEX];            //最大顶点数、
    15     //此处省虐将邻接矩阵G转化为边集数组edges并按权值由小到大排序生成的代码
    16     for(i=0;i<G.numVertexes;++i)
    17         parent[i]=0;
    18     for(i=0;i<G.numEdges;++i)
    19     {
    20         n=find();
    21         m=find(parent,edges[i].end);
    22         if(n!=m){        // 说明此边没有与现有的生成树形成环路 
    23             parent[n]=m;        //将此边的结尾顶点放入下标为起点的parent中
    24                                 //表示此顶点已经在生成树集合中
    25             printf("(%d,%d)%d",edges[i].begin,edges[i].end,edges[i].weight);
    26         }
    27      }
    28 }
    29 int find(int *parent,int f)
    30 {
    31     while(parent[f]>0)
    32         f=parent[f];
    33     return f;
    34 }

    个人理解:感觉难点就在理解find函数和parent数组,parent数组和find的函数实际上呢就是在找此边的前端(也可以说是另一边),

    比如edges[i],begin和edges[i].end在现有的生成树中寻找这边上两个顶点连着的另一条边

  • 相关阅读:
    调用https接口 报错:unable to find valid certification path
    POI生成Excel
    杂七杂八记录
    maven 打jar 包 pom.xml配置
    IDEA 全局修改项目版本
    Spring AOP的内部调用问题
    redis 中文乱码
    windows redis cluster 配置
    spring事物失效场景
    Mybatis常用示例
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5191883.html
Copyright © 2011-2022 走看看