Prim 算法求解带权无向连通图最小生成树边权和:附 C++ 代码及注意点
以下是使用 Prim 算法解决此问题的 C++代码: ```cpp #include <iostream> #include <vector> #include <queue> using namespace std; const int MAXN = 10005; // 最大节点数 const int INF = 1e9; // 无穷大 int n, m; // 节点数和边数 vector<pair<int, int>> graph[MAXN]; // 邻接表存储图 bool visited[MAXN]; // 标记节点是否已访问 int prim() { int res = 0; // 结果 priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; // 最小堆 pq.push({0, 1}); // 从第一个节点开始 while (!pq.empty()) { auto cur = pq.top(); // 取出当前最小边 pq.pop(); int cost = cur.first; // 边权 int node = cur.second; // 节点 if (visited[node]) continue; // 如果已访问过,跳过 visited[node] = true; // 标记已访问 res += cost; // 累加边权 for (auto edge : graph[node]) { // 遍历相邻节点 if (!visited[edge.first]) { // 如果未访问 pq.push({edge.second, edge.first}); // 加入堆 } } } return res; } int main() { cin >> n >> m; for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; graph[u].push_back({v, w}); graph[v].push_back({u, w}); } cout << prim() << endl; return 0; } ``` 额外需要注意的逻辑点: 1. 邻接表的构建要确保准确,不要遗漏边。 2. 最小堆的操作要注意优先级的设置。 3. 标记已访问节点时要确保正确,避免重复计算。 ######[AI写代码神器 | 504点数解答 | 2024-12-15 15:49:02]
- 代码填空挑战:完成正态分布、随机数生成及数据处理代码(阿里通义 | 506点数解答 | 2025-03-23 14:32:14)347
- 挑战!完成代码填空解锁数据处理奥秘(字节豆包 | 116点数解答 | 2025-03-26 22:22:15)359
- 挑战填空!完成这段 NumPy 代码实现数据生成与保存(DeepSeek | 178点数解答 | 2025-03-26 22:26:30)422
- 旅行售货员问题:详细步骤剖析与贪心算法Python代码实现(字节豆包 | 444点数解答 | 2024-12-17 03:32:59)294
- Dev C++ 实现旅行售货员问题:最小路程路线代码与详细解析 (字节豆包 | 448点数解答 | 2024-12-17 03:33:42)193
- C++ 求解 P1020 小核桃与删除字符串问题:双指针与枚举策略 (字节豆包 | 330点数解答 | 2026-02-07 18:40:10)38
- 5条新春贺语,开启龙年吉祥团圆新篇章!(字节豆包 | 135点数解答 | 2025-01-15 14:43:34)330
- Java实现Student类:含构造、方法及年龄判定(字节豆包 | 464点数解答 | 2024-11-19 15:55:26)402
- Python 实现多功能手机通讯录:添加、查看、删除、修改、查找全搞定!(字节豆包 | 1030点数解答 | 2025-06-05 15:47:56)264
- Python切片操作巧解经典算法:二维数组90°旋转(阿里通义 | 205点数解答 | 2023-10-31 11:05:29)351
- 揭秘iOS开发:常用算法大集合,提升应用性能与体验!(阿里通义 | 246点数解答 | 2023-11-08 00:43:08)303
- 深入解析:Vue2.x与Vuex3.x渲染器的Diff算法奥秘(阿里通义 | 222点数解答 | 2023-11-09 01:35:41)380