频道栏目
首页 > 资讯 > 其他 > 正文

最小生成树之普利姆算法

17-01-25        来源:[db:作者]  
收藏   我要投稿
最小生成树之普利姆算法:
void CMap::primTree(int nodeIndex)
{
    int value = 0;
    int edgeCount = 0;
    vectornodeVec;
    vectoredgeVec;
    nodeVec.push_back(nodeIndex);
    cout << m_pNodeArray[nodeIndex].m_cData << endl;
    m_pNodeArray[nodeIndex].m_bIsVisited = true;

    while (edgeCount < m_iCapacity - 1)
    {
        int temp = nodeVec.back();
        for (int i = 0; i < m_iCapacity;i++)
        {
            getValueFromMatrix(temp, i, value);
            if (value!=0)
            {
                if (!m_pNodeArray[i].m_bIsVisited)
                {

                    Edge edge(temp, i, value);
                    edgeVec.push_back(edge);
                }
            }
            else
            {
                continue;
            }
        }

        int min = getMinEdge(edgeVec);
        cout << edgeVec[min].m_iNodeIndexA << " " << edgeVec[min].m_iNodeIndexB<<" ";
        cout << edgeVec[min].m_iWeightValue << endl;

        m_pEdge[edgeCount] = edgeVec[min];
        edgeVec[min].m_bSelected = true;
        edgeCount++;

        int nextNodeIndex = edgeVec[min].m_iNodeIndexB;
        nodeVec.push_back(nextNodeIndex);
        cout << m_pNodeArray[nextNodeIndex].m_cData << endl;
        m_pNodeArray[nextNodeIndex].m_bIsVisited = true;

    }
}
int CMap::getMinEdge(vectoredgeVec)
{
    int minWeight = 0;
    int edgeIndex = 0;

    int i = 0;
    for (; i < (int)edgeVec.size(); i++)
    {
        if (!edgeVec[i].m_bSelected)
        {
            minWeight = edgeVec[i].m_iWeightValue;
            edgeIndex = i;
            break;
        }
    }

    if (minWeight == 0)
    {
        return -1;
    }


    for (; i < (int)edgeVec.size(); i++)
    {
        if (edgeVec[i].m_bSelected)
        {
            continue;
        }
        else
        {
            if (minWeight > edgeVec[i].m_iWeightValue)
            {
                minWeight = edgeVec[i].m_iWeightValue;
                edgeIndex = i;
            }
        }
    }
    return edgeIndex;
}

这里写图片描述

相关TAG标签
上一篇:如何处理json数据
下一篇:资源(2)资源字典
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站