文章

28

粉丝

226

获赞

53

访问

143.8k

头像
prim
推荐阅读
Sacan SVIP
P1312 浙江大学机试题
发布于2022年6月30日 12:07
阅读数 4.4k

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...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发