Prim 算法应用

问题描述

大家,我有一个加权连通无向图,我需要找到它的最小生成树权重。在输入我有数字 n(顶点数量),m(边缘数量)。然后 m 条边的格式为:A(out vert),B(in vert),C(weight)。这是输入示例:

3 3
1 2 1
2 3 2
3 1 3

我将其视为典型的 Prim 算法,因此我使用了它,但一些测试告诉我,我的代码给出了错误的答案。这是:

#include <numeric>
#include <iostream>

using namespace std;

long long primAlgo(const int vertices,const vector<vector<long long>> &edges) {
    vector<bool> visited(vertices,false);
    vector<long long> minimal(vertices,30001);

    minimal[0] = 0;
    for (size_t i = 0; i != vertices; ++i) {
        int vert = -1;
        for (size_t option = 0; option != vertices; ++option) {
            if (!visited[option] && (vert == -1 || minimal[option] < minimal[vert]))
                vert = option;
        }
        visited[vert] = true;

        for (size_t to = 0; to != vertices; ++to) {
            if (edges[vert][to] < minimal[to]) {
               minimal[to] = edges[vert][to];
            }
        }
    }

    long long sum = 0;

    for (size_t i = 0; i != vertices; ++i) {
        sum += minimal[i];
    }
    return sum;
}

int main() {
    int n,m;
    cin >> n >> m;
    int A,B;
    long long C;
    vector<vector<long long>> l(n,vector<long long> (n,30001));
    for (size_t i = 0; i != m; ++i) {
        cin >> A >> B >> C;
        l[A - 1][B - 1] = C;
        l[B - 1][A - 1] = C;
    }

    long long ans = primAlgo(n,l);
    cout << ans;
}

所以我想知道,如果你知道,可能是什么问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)