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

2021-10-16 13:21:31 字數 1764 閱讀 1748

給你乙個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,...