Problem 1 Connecting Cities With Minimum cost

n个村庄,最小?

Step 1: 看出来是个最小生成树

Step 2: Apply Kruskal or Prims

public int minimumCost(int n, int[][] connections) {
    intp[ laoda = new int[];
    for (int i = 0; i < n; i++) {
        laoda[i] = i;
    }
    Arrays.sort(connections, (a, b) -> Integer.compare(a[2], b[2]));
    int result = 0;
    int count = 0;
    
    for (int[] current : connections) {
        int a = current[0] - 1;
        int b = current[1] - 1;
        int alaoda = find(a, laoda);
        int blaoda = find(b, laoda);
        
        if (alaoda != blaoda) {
            result += current[2];
            count++;
            laoda[alaoda] = blaoda;
            if (count == n -1) {
                return result;
            }
        }
    }
    return -1;
}
private int find(int a, int[] laoda) {
    return laoda[a] = laoda[a] == a? a: find(laoda[a], laoda);
}

Last updated