C数据结构与算法-基础整理-图-06:克鲁斯卡尔算法详解
详解最小生成树中的克鲁斯卡尔算法 0x01.关于克鲁斯卡尔算法 Kruskal算法 是一种用来查找 最小生成树 的算法,由Joseph Kruskal在1956年发表。克鲁斯卡尔算法主要针对边集数组展开。 0x02.基础代码 这个算法主要是针对边集数组,先来看一下边集数组的结构: //边集数组 typedef struct { int begin; int end; int weight; }Edge; 通常用到邻接矩阵,所以还需要由邻接矩阵转化为边集数组。另外这个算法还需要按照边的权值升序排序。 void OperationEdge(Graph G, Edge* edges) { int i, j,k; k = 0; for (i = 0; i < G.numv; i++) { for (j = i+1; j < G.numv; j++)//只需要转化邻接矩阵的一半,无向图 { if (G.edge[i][j] != INTMAX && G.edge[i][j] != 0) { edges[k].begin = i; edges[k].end = j; edges[k].weight = G.edge[i][j]; k++; } } } for (i = 0; i < k-1; i++)//简单交换排序 { for (j = i + 1; j < k; j++) { if