最小生成樹,建立在並查集結構上的資料處理方法之一,目的是找到一條最短的路徑聯通圖中每乙個點。
kruskal比較好理解的地方在於,這是乙個貪心思想實現的**。它是將邊按權值排序,每次從剩下的邊集中選擇權值最小且兩個端點不在同一集合的邊加入生成樹中,反覆操作,直到加入了n-1條邊。
很簡單的思路,實現起來比較方便。
隔壁的prim演算法:其實沒什麼好說的,就是把dijkstra照著打一遍就對了。本質上求的是最短路。前提是先得建圖。
貼一下kruskal的**
#include#includeusing namespace std;
#define guiguiguilinglingling 0
using namespace std;
int root[10005],result,n,m,l=0;
struct node
edge[500005];
bool cmp(node a,node b)
void init()
for (int i=0;isort(edge,edge+m,cmp);}
int find(int x)
return root[x];}
void kruskal()
int find_a=find(edge[i].start);
int find_b=find(edge[i].end);
if (find_a!=find_b) //若這兩個點根節點不同,則
}}int main()
kruskal 最小生成樹
include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...
最小生成樹Kruskal
最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...
最小生成樹(kruskal)
kruskal演算法 1 記graph中有v個頂點,e個邊 2 新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊 3 將原圖graph中所有e個邊按權值從小到大排序 4 迴圈 從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中 if 這條邊連線...