微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Prim 算法应用

如何解决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 举报,一经查实,本站将立刻删除。