給你乙個points 陣列,表示 2d 平面上的一些點,其中 points[i] = [xi, yi] 。
連線點 [xi, yi] 和點 [xj, yj] 的費用為它們之間的 曼哈頓距離 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的絕對值。
請你返回將所有點連線的最小總費用。只有任意兩點之間 有且僅有 一條簡單路徑時,才認為所有點都已連線。
貪心演算法 我弄不懂,各位大佬講解一下唄
class
disjointsetunion
:# 初始化
def__init__
(self, n)
: self.n = n
self.rank =[1
]* n
self.f =
list
(range
(n))
deffind
(self, x:
int)
->
int:
if self.f[x]
== x:
return x
self.f[x]
= self.find(self.f[x]
)return self.f[x]
defunionset
(self, x:
int, y:
int)
->
bool
: fx, fy = self.find(x)
, self.find(y)
if fx == fy:
return
false
if self.rank[fx]
< self.rank[fy]
: fx, fy = fy, fx
self.rank[fx]
+= self.rank[fy]
self.f[fy]
= fx
return
true
class
solution
:def
mincostconnectpoints
(self, points: list[list[
int]])
->
int:
dist =
lambda x, y:
abs(points[x][0
]- points[y][0
])+abs
(points[x][1
]- points[y][1
])n =
len(points)
dsu = disjointsetunion(n)
edges =
list()
for i in
range
(n):
for j in
range
(i +
1, n)
:(dist(i, j)
, i, j)
)
edges.sort(
)
ret, num =0,
1for length, x, y in edges:
if dsu.unionset(x, y)
: ret += length
num +=
1if num == n:
break
return ret
1584 連線所有點的最小費用
給你乙個points 陣列,表示 2d 平面上的一些點,其中 points i xi,yi 連線點 xi,yi 和點 xj,yj 的費用為它們之間的 曼哈頓距離 xi xj yi yj 其中 val 表示 val 的絕對值。請你返回將所有點連線的最小總費用。只有任意兩點之間 有且僅有 一條簡單路徑時...
leecode 1584 連線所有點的最小費用
給你乙個points 陣列,表示 2d 平面上的一些點,其中 points i xi,yi 連線點 xi,yi 和點 xj,yj 的費用為它們之間的 曼哈頓距離 xi xj yi yj 其中 val 表示 val 的絕對值。請你返回將所有點連線的最小總費用。只有任意兩點之間 有且僅有 一條簡單路徑時...
每日一題 1584 連線所有點的最小費用
1584.連線所有點的最小費用 分類 圖 最小生成樹 prime演算法 class solution public int mincostconnectpoints vector points int n points.size vectorvisited n,false vectorcost n,...