-
-
慕粉3672057
2017-08-30
- mergeNodeSet
-
截图
0赞 · 0采集
-
-
慕粉3672057
2017-08-30
- nodeSets
-
截图
0赞 · 0采集
-
-
精慕门4947531
2016-11-11
- void DMap::kruskalTree()
{
int value=0;
int edgeCount=0;
//定义存放结点集合的数组
vector<vector<int>> nodeSets;
//第一步取出所有边; 主对角线上半部分矩阵
vector<Edge>edgeVect;
for(int i=0;i<m_iCapacity;i++)
{
for(int k=i+1;k<m_iCapacity;k++)
{
getValueFromMatrix(i,k,value);
if(value!=0)
{
Edge edge(i,k,value);
edgeVect.push_back(edge);
}
}
}
//第二步从所有边取出组成最小生成树的边
//1.找出算法的终结条件
while(edgeCount<m_iCapacity-1)
{
//2.从边集合找到最小边
int minEdgeIndex=getMinEdge(edgeVect);
edgeVect[minEdgeIndex].m_bSelected=true;
//3.找到最小边连接的点
int nodeAIndex=edgeVect[minEdgeIndex].m_iNodeIndexA;
int nodeBIndex=edgeVect[minEdgeIndex].m_iNodeIndexB;
bool nodeAisInSets=false;
bool nodeBisInSets=false;
int nodeAInSetLabel=-1;
int nodeBInSetLabel=-1;
//4.找到点所在的点集合
for(int i=0;i<(int)nodeSets.size();i++)
{
nodeAisInSets=isInSets(nodeSets[i],nodeAIndex);
if(nodeAisInSets)
{
nodeAInSetLabel=i;
}
}
for(int i=0;i<(int)nodeSets.size();i++)
{
-
1赞 · 2采集