克鲁斯卡尔(Kruskal)算法
来源:互联网 发布:java 发邮件代码 编辑:程序博客网 时间:2024/05/16 01:40
一.克鲁斯卡尔(Kruskal)算法思想
考虑问题的出发点:为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能的小。
克鲁斯卡尔(Kruskal)算法思想:设连通网N=(V,E),令最小生成树初始状态为只有n个顶点而无边的非连通图T=(V,{F}),每个顶点自成一个连通分量在E中选取代价最小的边,若该边依附的顶点落在T中两个不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最小的边依此类推,直至T中所有顶点都在同一连通分量上为止。
二.利用克鲁斯卡尔(Kruskal)算法构造最小生成树
例:利用克鲁斯卡尔(Kruskal)算法对下面的连通网构造一棵最小生成树。
利用克鲁斯卡尔(Kruskal)算法构造最小生成树的步骤:
三.算法描述
克鲁斯卡尔(Kruskal)算法描述
数据存储结构:
typedef struct { VertexType vex1; VertexType vex2; VRType weight;}EdgeType;typedef ElemType EdgeType;typedef struct { // 有向网的定义 VertexType vexs[MAX_VERTEX_NUM]; // 顶点信息 EdgeType edge[MAX_EDGE_NUM]; // 边的信息 int vexnum,arcnum; // 图中顶点的数目和边的数目}ELGraph;
克鲁斯卡尔(Kruskal)算法描述:
void MiniSpanTree_Kruskal(ELGraph G, SqList& MSTree){// G.edge 中依权值从小到大存放有向网中各边,按克鲁斯卡尔// 算法求得生成树的边存放在顺序表 MSTree 中MFSet F;InitSet(F, G.vexnum); // 将森林F初始化为n棵树的集合InitList(MSTree, G.vexnum); // 初始化生成树为空树i=0; k=1;while( k<G.vexnum ) { e = G.edge[i]; // 取第 i 条权值最小的边 r1 = fix_mfset(F, LocateVex(e.vex1)); r2 = fix_mfset(F, LocateVex(e.vex2)); // 返回两个顶点所在树的树根 if (r1 != r2) { // 选定生成树上第k条边 if (ListInsert(MSTree, k, e)) k++; // 插入生成树 mix_mfset(F, r1, r2); // 将两棵树归并为一棵树 } // if i++; // 继续考察下一条权值最小边 } // whileDestroySet(F);} // MiniSpanTree_Kruskal
- 克鲁斯卡尔(Kruskal)算法
- 克鲁斯卡尔(Kruskal)算法
- kruskal克鲁斯卡尔算法
- 克鲁斯卡尔算法(Kruskal)
- 克鲁斯卡尔算法(Kruskal)模板
- 克鲁斯卡尔(Kruskal)算法
- (Kruskal)克鲁斯卡尔算法
- kruskal's algorithm.[克鲁斯卡尔算法]
- [数据结构]克鲁斯卡尔(Kruskal)算法
- Kruskal(克鲁斯卡尔)
- 克鲁斯卡尔Kruskal
- 普利姆(prim)算法和克鲁斯卡尔(kruskal)算法
- 普里姆算法(Prim)和克鲁斯卡尔(Kruskal)算法
- Prim(普利姆)算法+Kruskal(克鲁斯卡尔)算法
- 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
- 最小生成树-kruskal算法(克鲁斯卡尔算法)
- 最小生成树---克鲁斯卡尔kruskal算法
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- STL函数对象
- 开通BLOG
- Linux buffer和cache区别
- hdu 4669 Mutiples on a circle 多校第七场
- HTTPS是如何保证连接安全:每位Web开发者都应知道的
- 克鲁斯卡尔(Kruskal)算法
- hdu -1241 Oil Deposits
- android 将一个bitmap保存成图片文件
- gcc静态库链接的问题
- hdu2802之矩阵乘法
- HDOJ 1042
- Linux中如何创建静态库和动态库
- 优秀Jquery插件
- 解决Ajax请求出现Uncaught SyntaxError: Unexpected token : 错误