文章
28
粉丝
226
获赞
53
访问
143.8k
A集合表示已经加入到最小生成树中的点的集合
B集合表示剩下的点的集合
#include <iostream>
#include <algorithm>
#define INF 1000000
using namespace std;
int n,m;
const int maxn = 105;
// 图
int gra[maxn][maxn];
// dist[i]表示A集合中到B集合中的i点的最短直接距离。特别的,当dist[i]=0意味着i已经在A中了
int dist[maxn];
void prim(){
// 初始化工作
for(int i = 1;i <= m;i++){
dist[i] = INF;
}
for(int i = 1;i <= m;i++){
for(int j = 1;j <= m;j++){
if(i == j){
gra[i][j] = 0;
}else{
gra[i][j] = INF;
}
}
}
// 输入图
for(int i = 1;i <= n;i++){
int u,v,w;
cin >> u >> v >> w;
gra[u][v] = min(gra[u][v], w); //有多条相同边时,肯定取最短一条
gra[v][u] = min(gra[v][u], w); // 无向图
}
// 开始prim
int sum = 0;
int flag = 0;
// 方便起见,默认将点1做为第一个点,直接加入A集合中(dist[1][1]=0),并更新一次dist
for(int i = 1;i <= m;i++){
dist[i] = gr...
登录后发布评论
暂无评论,来抢沙发