问题描述
大家,我有一个加权连通无向图,我需要找到它的最小生成树权重。在输入我有数字 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 (将#修改为@)