构建最小生成树的prim算法
来源:互联网 发布:从矩阵小区到银谷大厦 编辑:程序博客网 时间:2024/05/23 19:16
Prim算法通过不断地增加生成树的顶点来得到最小生成树。在算法的任一时刻,一部分顶点已经添加到生成树的顶点集合中,而其余的顶点尚未加到生成树中。此时,Prim算法通过选择边(u,v),使得(u,v)的权值是所有u在生成树中但v不在生成树中的边的权值的最小者,从而找到新的顶点v并把它添加到生成树中,最后得到生成树的所有EDGE。
下面是代码
template <class EdgeType>Edge<EdgeType> * Prim(Graph<EdgeType>& G, int s)//Prim法建立最小生成树{int i, j;Edge<EdgeType> *MST;//存储最小生成树的边EdgeType *minWeight;//表示每个节点到生成树节点中的最小权值int *neighbor;//表示每个未进入生成树的节点,对应生成树中的最小权值节点的编号 -1表示已经在生成树节点集中int n = G.vertexNum;minWeight = new EdgeType[n];neighbor = new int[n];MST = new Edge<EdgeType>[n - 1];for (i = 0; i < n; i++){minWeight[i] = AFFINITY;neighbor[i] = s;}neighbor[s] = -1;Edge<EdgeType> e;for (e = G.FirstEdge(s); G.IsEdge(e); e = G.NextEdge(e)){minWeight[e.end] = e.weight;}for (i = 0; i < n - 1; i++){EdgeType min = AFFINITY;int v = -1;//标记下一个要进入生成树的节点编号for (j = 0; j < n; j++){if (minWeight[j]<min&&neighbor[j]>-1)//找到目前最小权值的未进入生成树的节点的条件{min = minWeight[j];v = j;}}if (v > 0)//进行将最小权值的节点加入到生成树中并且向MST添加新的边,还有更新两个数组的信息{Edge<EdgeType> temp(neighbor[v], v, min);MST[i] = temp;neighbor[v] = -1;for (e = G.FirstEdge(v); G.IsEdge(e); e = G.NextEdge(e)){if (neighbor[e.end] != -1 && minWeight[e.end] > e.weight){neighbor[e.end] = v;minWeight[e.end] = e.weight;}}}}delete[] minWeight;delete[] neighbor;return MST;}
1 0
- 构建最小生成树的prim算法
- Prim 算法生成的最小生成树
- 最小生成树的prim算法代码
- 最小生成树的prim算法实现
- 构造最小生成树的 prim 算法
- 最小生成树的Prim算法
- 图的最小生成树(prim算法)
- 最小生成树的prim算法
- 最小生成树的prim算法
- JAVA的最小生成树(prim)算法
- 最小生成树的prim算法实现
- 最小生成树的prim算法
- 最小生成树的Prim算法
- 最小生成树的Prim算法笔记
- 求最小生成树的Prim算法
- 最小生成树的prim算法
- 求最小生成树的prim算法
- 图的最小生成树---Prim算法
- tensorflow+ubuntu16.04
- 微信支付详解
- Gradle
- 第一个只出现一次的字符
- 感受神话般的“衡中”
- 构建最小生成树的prim算法
- Redis 学习笔记(一)
- 淘宝下单部分高并发设计 的个人理解
- UNREFERENCED_PARAMETER 的作用
- 详解prototype与__proto__区别
- 学习笔记1:Ruby模块:module
- 第十五周--B-树的操作
- WPF之GUI编写
- 语法tips4(宏定义函数)