题解 | 最小生成树

最小生成树

https://www.nowcoder.com/practice/735a34ff4672498b95660f43b7fcd628

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 返回最小的花费代价使得这n户人家连接起来
 * @param n int整型 n户人家的村庄
 * @param m int整型 m条路
 * @param cost int整型二维数组 一维3个参数,表示连接1个村庄到另外1个村庄的花费的代价
 * @param costRowLen int cost数组行数
 * @param costColLen int* cost数组列数
 * @return int整型
 */
#include <stdlib.h>
int compare(const void* a, const void* b){
    int* rowA =  *(int**)a; // 强制类型转换
    int* rowB =  *(int**)b;
    return rowA[2] - rowB[2];
}
int find(int* parent,int x){
    if(parent[x]!=x){
        parent[x]=find(parent, parent[x]);
    }
    return parent[x];
}
int miniSpanningTree(int n, int m, int** cost, int costRowLen, int* costColLen) {
    // write code here
    qsort(cost, m, sizeof(cost[0]), compare);
    for(int i=0;i<m;i++){
        printf("%d ",cost[i][2]);
    }
    int* parent=(int*)malloc(sizeof(int)*(n+1));
    for(int i=0;i<=n;i++){
        parent[i]=i;
    }
    int res = 0;
    for(int i=0;i<m;i++){
        int x=cost[i][0];
        int y=cost[i][1];
        int z=cost[i][2];
        int px=find(parent, x);
        int py=find(parent, y);
        if(px!=py){
            res += z;
            parent[px]=py;
        }
    }
    return res;
}

全部评论

相关推荐

点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务