1584 連線所有點的最小費用

2021-10-16 17:30:06 字數 2328 閱讀 2818

給你乙個points 陣列,表示 2d 平面上的一些點,其中 points[i] = [xi, yi] 。

連線點 [xi, yi] 和點 [xj, yj] 的費用為它們之間的 曼哈頓距離 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的絕對值。

請你返回將所有點連線的最小總費用。只有任意兩點之間 有且僅有 一條簡單路徑時,才認為所有點都已連線。

示例 1:

輸入:points = [[0,0],[2,2],[3,10],[5,2],[7,0]]

輸出:20

解釋:

我們可以按照上圖所示連線所有點得到最小總費用,總費用為 20 。

注意到任意兩個點之間只有唯一一條路徑互相到達。

對於這道題來說,需要用最小生成樹的方法來解決,這裡採用kruskal演算法並且用並查集的方法判斷圖中節點的連通性,保證兩點之間有且僅有一條邊

kruskal演算法

將任意兩節點的距離得出,並且按照從小到大的順序排序,然後根據節點距離依次將兩點連線,此題樹的根節點可以隨意選擇,我將第乙個點設定為這個最小生成樹的根節點,其實就是使用貪心的方法

from typing import list

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 =

# 得出圖中任意兩點的邊的集合

for i in

range

(n):

for j in

range

(i+1

,n):

(dist(i,j)

,i,j)

) edges.sort(

) ret,num =0,

1for lengh,x,y in edges:

if dsu.unionset(x,y)

:# 使用並查集維護連通性,若當前邊兩端不連通即可選擇這條邊

ret += lengh

num +=

1if num == n:

break

return ret

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,...

Python基礎11 連線所有點的最小費用

給你乙個points 陣列,表示 2d 平面上的一些點,其中 points i xi,yi 連線點 xi,yi 和點 xj,yj 的費用為它們之間的 曼哈頓距離 xi xj yi yj 其中 val 表示 val 的絕對值。請你返回將所有點連線的最小總費用。只有任意兩點之間 有且僅有 一條簡單路徑時...