應用場景,求最小生生樹,prim o(n²),n指定點,kruskal(eloge),e指邊,即prim演算法從定點的角度取考慮,更適合邊稠密的網路,kruskal演算法從邊的角度取考慮,更適合邊稀疏的情況!prim:
1.任意選取乙個起始點,找到最與這個起始點相連邊的權值最小的定點,得到集合點a
2.對a重複1的過程直到所有的點都被納入集合a
kruskal:
1、將v個頂點,l條邊的圖g中所有的邊按權值大小從小到大排序,這一步可以直接用庫函式qsort或者sort。
2、從權值小的邊開始依次選取,若選取的邊使生成樹t不形成迴路,則選之;若選取的邊使生成樹形成迴路,則將其捨棄;如此進行下去,直到選取v-1條邊為止。
在上述的方法中,最關鍵的地方在於判斷新加入的邊與生成樹是否構成迴路,判斷圖是否構成迴路有很多方法,這裡我們使用並查集來判斷圖是否構成迴路。
將頂點劃分到不同集合中,每個集合中的頂點表示乙個無迴路的連通分量。演算法開始時,將n個頂點劃分到n個集合中,每個集合乙個頂點,表示頂點之間互不相通。當選取一條邊時,若它的兩個頂點屬於不同的集合,則表明連通了兩個不同的連通分量,因每個連通分量沒有迴路,所以連通後仍然不會有迴路,因此保留這條邊;同時把兩個集合進行合併成為乙個集合。若選取的邊屬於同乙個集合,則捨棄此邊。
5513. 連線所有點的最小費用給你乙個points 陣列,表示 2d 平面上的一些點,其中 points[i] = [xi, yi] 。
連線點 [xi, yi] 和點 [xj, yj] 的費用為它們之間的 曼哈頓距離 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的絕對值。
請你返回將所有點連線的最小總費用。只有任意兩點之間 有且僅有 一條簡單路徑時,才認為所有點都已連線。
1.最小生成樹裸題,prim優先佇列實現,kruskal排序+並查集實現
class solution:
def mincostconnectpoints(self, points: list[list[int]]) -> int:
from queue import priorityqueue
cal=lambda p1,p2:abs(p1[0]-p2[0])+abs(p1[1]-p2[1])
q=priorityqueue()
visited=set([i for i in range(len(points))])
q.put((0,0))
res=0
while visited:
cost,now=q.get()
if now not in visited:continue
visited.remove(now)
res+=cost
for i in visited:
q.put((cal(points[now],points[i]),i))
return res
class solution:
def mincostconnectpoints(self, points: list[list[int]]) -> int:
if len(points)<2:return 0
cost=
for i in range(len(points)-1):
for j in range(i+1,len(points)):
cost.sort(key=lambda x:x[0])
res=0
p=def find(x):
if p[x]!=x:
p[x]=find(p[x])
return p[x]
for c,i,j in cost:
if find(i)!=find(j):
p[find(i)]=find(j)
res+=c
return res
最小生成樹演算法
由帶權的連通圖生成的數的各邊加起來稱為生成樹的權,把權值最小的生成樹稱為最小生成樹 minimum spanning tree 簡稱為mst 構造最小生成樹的方法就是利用mst性質,一條一條地選擇可以加入的邊。下面介紹兩種用於構造最小生成樹的演算法,其中第一種演算法稱為prim演算法,第二種演算法稱...
最小生成樹演算法
乙個最簡單的最小生成樹 圖結構練習 最小生成樹 time limit 1000ms memory limit 65536k 有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。輸...
演算法 最小生成樹
前言 最小生成樹是在乙個給定的無向圖中求一棵樹,這棵樹包含無向圖中的所有頂點,且樹中的邊都來自無向圖中的邊,並且要滿足整棵樹的邊權之和最小。1 最小生成樹是樹,其邊數等於頂點數減1,且不會有環 2 對於給定的圖最小生成樹可以不唯一,但是邊權之和一定是唯一的。3 其根節點可以是這棵樹上的任何乙個節點,...