class Solution {
public:
int mp[1005][1005] = {0};
int cost[1005];
int vis[1005] = {0};
int sz;
int prim(){
int sum = 0;
vis[0] = 1;
for(int i = 0; i < sz - 1; i++){
int _min = INT_MAX, sub_min;
//要将n-1个结点加入最小生成树
for(int j = 1; j < sz; j ++){
if(vis[j] == 0 && _min > cost[j]){
sub_min = j;
_min = cost[j];
}
}
vis[sub_min] = 1;
sum +=cost[sub_min];
//更新最小生成树到其他节点的距离
for(int j = 1; j < sz; j++){
if(vis[j] == 0 && mp[sub_min][j] < cost[j]){
cost[j] = mp[sub_min][j];
}
}
}
return sum;
}
int minCostConnectPoints(vector<vector<int>>& points) {
//初始化
memset(mp, INT_MAX, sizeof(mp));
sz = points.size();
for(int i = 0; i < sz; i++){
for(int j = i + 1; j < sz; j++){
mp[i][j] = abs(points[i][0] - points[j][0]) + abs(points[i][1] - points[j][1]);
mp[j][i] = mp[i][j];
}
}
cost[0] = 0;
for(int i = 1; i < sz; i++){
cost[i] = mp[0][i];
}
return prim();
}
};
最小生成树Prim 模板
于 2023-03-08 19:24:20 首次发布