... // 前文并查集实现代码省略 funcminCostConnectPoints(points [][]int) (ans int) { n := len(points) type edge struct{ v, w, dis int } edges := []edge{} // 记录边和边的距离信息 for i, p := range points { for j := i + 1; j < n; j++ { edges = append(edges, edge{i, j, dist(p, points[j])}) } } // 根据曼哈顿距离从小到大排序,题中的曼哈顿距离就是边的权值 sort.Slice(edges, func(i, j int)bool { return edges[i].dis < edges[j].dis })
uf := newUnionFind(n) // 只需要重复n-1次 left := n - 1 for _, e := range edges { if uf.merge(e.v, e.w) { ans += e.dis left-- if left == 0 { break } } } return }