1584. Min Cost to Connect All Points
// Some code
class Solution {
int cost;
public int minCostConnectPoints(int[][] points) {
int num = points.length;
// number of all edges: num*(num-1)/2
int[][] edges = new int[num*(num-1)/2][3];
int index = 0;
for(int i=0; i<num; i++){
for(int j=i+1; j<num; j++){
edges[index][0]=i;
edges[index][1]=j;
edges[index][2]=Math.abs(points[i][0]-points[j][0]) + Math.abs(points[i][1]-points[j][1]);
index++;
}
}
Arrays.sort(edges, (a,b)->a[2]-b[2]);
UnionFind uf = new UnionFind(num);
for(int[] edge : edges){
if(!uf.isConnected(edge[0],edge[1])){
uf.union(edge[0], edge[1]);
cost+=edge[2];
}
}
return cost;
}
}
class UnionFind{
private int[] graph;
public int count;
public UnionFind(int n){
graph = new int[n];
for(int i=0; i<n; i++){
graph[i]=i;
}
count = n;
}
public void union(int p, int q){
int rootP = find(p);
int rootQ = find(q);
if(rootP!=rootQ){
graph[rootP]=rootQ;
count--;
}
}
public boolean isConnected(int p, int q){
int rootP = find(p);
int rootQ = find(q);
return rootP == rootQ;
}
public int find(int p){
while(graph[p]!=p){
graph[p] = graph[graph[p]];
p=graph[p];
}
return p;
}
}
Last updated
Was this helpful?