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