Prim最小生成树算法(C++)
来源:互联网 发布:hough变换算法 编辑:程序博客网 时间:2024/06/05 23:48
Prim最小生成树算法
算法主体程序
void MyMap::primTree(int nodeIndex){ vector<int> nodeVec; vector<Edge> edgeVec; //将第一个顶点添加至顶点集合 nodeVec.push_back(nodeIndex); cout << m_pNodeArray[nodeIndex].m_cData << endl; m_pNodeArray[nodeIndex].m_bIsVisited = true; int tempNodeIndex = 0; int m_iEdgeCount = 0; int weightValue = 0; int minEdgeIndex = 0; //查找与当前节点相邻的边,将其添加至候选边集合 while (m_iEdgeCount < m_iCapacity-1) { //取出当前顶点 tempNodeIndex = nodeVec.back(); //遍历查找当前顶点的相邻节点 for (int i = 0;i < m_iCapacity;i++) { getValueFromMatrix(tempNodeIndex, i, weightValue); if (weightValue != 0) { if(m_pNodeArray[i].m_bIsVisited) { //与已访问过的节点之间的边不添加, 因为已经添加了 continue; } Edge edge(tempNodeIndex, i, weightValue); edgeVec.push_back(edge); } } //找出候选边集合中权重最小的边,程序在下边 minEdgeIndex = getMinWeightEdge(edgeVec); cout << edgeVec[minEdgeIndex].m_iNodeIndexA << "------" << edgeVec[minEdgeIndex].m_iNodeIndexB << " "; cout << edgeVec[minEdgeIndex].m_iWeight << endl; edgeVec[minEdgeIndex].m_bIsSelected = true; //将该边添加至权重最小边集合 m_pEdge[m_iEdgeCount] = edgeVec[minEdgeIndex]; m_iEdgeCount++; //顶点更新为最小边所连的那个顶点 tempNodeIndex = edgeVec[minEdgeIndex].m_iNodeIndexB; m_pNodeArray[tempNodeIndex].m_bIsVisited = true; cout << m_pNodeArray[tempNodeIndex].m_cData << endl; nodeVec.push_back(tempNodeIndex); }}
权重最小边查找程序
int MyMap::getMinWeightEdge(vector<Edge> edgeVec){ int minEdgeIndex = 0; int minEdgeWeight = 0; int i = 0; int k, l = 0; //找到第一条还未选择过的边 for (;i < (int)edgeVec.size();i++) { if (!edgeVec[i].m_bIsSelected) { minEdgeWeight = edgeVec[i].m_iWeight; minEdgeIndex = i; break; } } if (minEdgeWeight == 0) { return -1; } //找最小权重边的索引 for (i;i <(int) edgeVec.size();i++) { if (edgeVec[i].m_bIsSelected) { continue; } k = edgeVec[i].m_iNodeIndexA; l = edgeVec[i].m_iNodeIndexB; if (minEdgeWeight > edgeVec[i].m_iWeight) { if (m_pNodeArray[k].m_bIsVisited && m_pNodeArray[l].m_bIsVisited) { //避免出现最小生成树产生环路 continue; } minEdgeWeight = edgeVec[i].m_iWeight; minEdgeIndex = i; } } return minEdgeIndex;}
0 0
- Prim最小生成树算法(C++)
- 最小生成树Prim算法C语言
- 数据结构(C实现)------- 最小生成树之Prim算法
- 最小生成树(prim算法)
- 最小生成树算法(prim&kruskal)
- 最小生成树(prim算法)--poj1258
- 最小生成树(Prim算法)
- HDU1863---最小生成树(prim算法)
- 最小生成树(Prim算法)
- 最小生成树(prim算法)
- 最小生成树(prim算法模板)
- 最小生成树prim算法(贪心)
- 数据结构--最小生成树(Prim算法)
- Prim算法(最小生成树)
- 数据结构:最小生成树(Prim算法)
- 最小生成树(hdu1233)Prim算法
- 最小生成树(Prim算法)
- 最小生成树(Prim算法)
- IBM 混合数据仓库架构介绍
- MySQL提示:The server quit without updating PID file
- 训练第四周之矩阵快速幂
- socket通信
- 筛选法求素数 关键词——置零
- Prim最小生成树算法(C++)
- Echart动态加载数据
- express4.X框架中使用socket.io
- 前端面试之模块化-2、AMD规范和CommonJS规范
- Dx bad class file magic (cafebabe) or version (0033.0000)的一种解决方法
- Kruscal最小生成树算法(C++)
- hibernate配置---generate_statistics
- nginx服务器究竟是怎么执行php项目
- ios 震动代码