克鲁斯

最小生成树-克鲁斯卡尔算法

一个人想着一个人 提交于 2019-11-30 10:26:05
最小生成树-克鲁斯卡尔算法 算法思想 1.将图的所有连接线去掉,只剩顶点 2.从图的边集数组中找到权值最小的边,将边的两个顶点连接起来 3.继续寻找权值最小的边,将两个顶点之间连接起来,如果选择的边使得最小生成树出现了环路,则放弃该边,选择权值次小的边 4.直到所有的顶点都被连接在一起并且没有环路,最小生成树就生成了。 克鲁斯卡尔算法代码 //在连通网中求出最小生成树 #include <stdio.h> #include <stdlib.h> #define MAXEDGE 20 #define MAXVEX 20 #define INFINITY 65535 typedef struct { int arc[MAXVEX][MAXVEX]; int numVertexes, numEdges;//顶点数,边数 }MGraph; typedef struct { int begin; int end; int weight; }Edge; //对边集数组Edge结构的定义 //创建图的邻接矩阵 void CreateMGraph(MGraph *G) { int i, j; G->numEdges=11; G->numVertexes=7; for (i = 0; i < G->numVertexes; i++) { for ( j = 0; j < G->numVertexes