首页 > 编程语言 > 详细

leetcode1584. 连接所有点的最小费用(最小生成树算法的应用)

时间:2021-01-19 23:37:32      阅读:72      评论:0      收藏:0      [点我收藏+]
public class Solution {
    public int MinCostConnectPoints(int[][] points) {
      if (points.Length <= 1)
        {
            return 0;
        }
     //这边dictionary中key的二元组分别是指两个点即这条边的两个点分别在points数组中的一维下标
var dictionary = new Dictionary<(int, int), int>(); for (var i = 0; i < points.Length; i++) { for (int j = i + 1; j < points.Length; j++) { dictionary[(i, j)] = Math.Abs(points[i][0] - points[j][0]) + Math.Abs(points[i][1] - points[j][1]); } } var pairs = dictionary.OrderBy(it => it.Value).ToList(); HashSet<int> set = new HashSet<int>() {pairs[0].Key.Item1}; var sum = 0;
     //看所有的点是否遍历完全
while (set.Count < points.Length) { foreach (var pair in pairs) {
          //这个判断是用于检查两个点是否联通
if ((set.Contains(pair.Key.Item1) && !set.Contains(pair.Key.Item2)) || (set.Contains(pair.Key.Item2) && !set.Contains(pair.Key.Item1))) {
           //如果不连通,则加入当前值(因为此时值已经被事先排过序) sum
+= pair.Value; set.Add(pair.Key.Item1); set.Add(pair.Key.Item2); break; } } } return sum; } }

代码是借鉴的评论区一位老哥的老哥主页如下:https://leetcode-cn.com/u/wuxie0ne/ 写这篇文章是为了记录此次最小生成树的学习。

其实最小生成树的本质应该也是贪心算法,他始终是用当前权值最短的边去判断的。

leetcode1584. 连接所有点的最小费用(最小生成树算法的应用)

原文:https://www.cnblogs.com/jyj666/p/14299807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!