c++ - 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;
}
所以我想知道,如果你知道,问题可能是什么。
解决方案
推荐阅读
- android - Facebook Audience Network 与其他网络进行调解
- jquery - 清除 BootstrapTable 中的过滤器值
- java - 编辑 JTextPane 的 paintComponent() 方法来改变 String 的颜色
- arrays - 如何从数组中生成所有偶数长度的子序列?
- python - 用于一般维数的多维网格
- excel - 为什么某些行而不是其他行的单元格公式不一致和损坏?
- r - How to add two different magnitudes of point size in a ggplot bubbles chart?
- c# - Xamarin.iOS - 合并多个视频时为每个视频设置音频采样率
- c++ - 后面如何存储和调用,不同类的成员函数,继承自同一个接口类
- qt - QTabBar QSS 样式