int prim() { // --------------------- begin ---------------------- // ---------------------- end ----------------------- }
时间: 2023-11-17 09:03:32 浏览: 65
这是一个使用Prim算法求解最小生成树的函数。下面是该函数的实现过程:
```c++
int prim() {
int ans = 0; // 最小生成树的权值和
memset(vis, 0, sizeof(vis)); // 初始化所有节点的访问状态为未访问
vis[1] = 1; // 从节点1开始构建最小生成树,将节点1标记为已访问
for(int i=0; i<node[1].size(); ++i) p.push(node[1][i]); // 将与节点1相邻的边加入优先队列
while(!p.empty()) { // 当优先队列不为空时
Node t = p.top(); // 取出当前权值最小的边
p.pop(); // 弹出当前权值最小的边
if(vis[t.to]) continue; // 如果该边所连接的节点已经被访问过,则跳过该边
vis[t.to] = 1; // 标记该边所连接的节点为已访问
ans += t.w; // 将该边的权值加入最小生成树的权值和中
for(int i=0; i<node[t.to].size(); ++i) { // 将与该边所连接的节点相邻的边加入优先队列
if(!vis[node[t.to][i].to]) p.push(node[t.to][i]);
}
}
return ans; // 返回最小生成树的权值和
}
```
阅读全文