防止最大生成树中的循环

时间:2016-10-24 15:47:43

标签: c++ algorithm data-structures minimum-spanning-tree

我正在尝试用C ++创建一个最大的生成树,但是我在防止循环方面遇到了麻烦。在某些情况下,我的代码工作正常,但对于大多数情况,有一个循环。我正在使用邻接矩阵来找到边缘。

double maximumST( vector< vector<double> > adjacencyMatrix ) {

    const int size = adjacencyMatrix.size();
    vector <double> edges;
    int edgeCount = 0;
    double value = 0;
    std::vector<std::vector<int>> matrix(size, std::vector<int>(size));

    for (int i = 0; i < size; i++) {
        for (int j = i; j < size; j++) {
            if (adjacencyMatrix[i][j] != 0) {
                edges.push_back(adjacencyMatrix[i][j]);
                matrix[i][j] = adjacencyMatrix[i][j];
                edgeCount++;
           }
       }
    }

    sort(edges.begin(), edges.end(), std::greater<int>());

    for (int i = 0; i < (size - 1); i++) {
        value += edges[i];
    }

    return value;

}

我试图找到一个循环是通过为边创建一个新的邻接矩阵并在添加新边之前检查它,但是没有按预期执行。我也尝试构建一个3D矩阵,但我也无法使用它。

我应该尝试哪种新方法来预防周期?

1 个答案:

答案 0 :(得分:0)

如果与该边对应的两个顶点的最低共同祖先(LCA)不是根,则应添加边。