演算法 Kruskal與資料結構 並查集的應用

2021-10-07 02:19:04 字數 1021 閱讀 2689

使用並查集來檢測弧的兩端節點是否連通。 

#include#include#include#include#includeusing namespace std;

//並查集

class union_set

;union_set::union_set(int len)

void create(const vectordata,const int road_nums);

void output();

~adjlist();

void kruskal();

};//建立鄰接表

void adjlist::create(const vectordata,const int road_nums)

}//列印鄰接表

void adjlist::output()

coutvectormst_pointer_array;//儲存生成樹每一條弧節點的資訊

int node_num=vernode_list.size();//節點數量

union_set us(node_num);

arcnode*f;

//把圖的所有弧輸入進陣列中,順便建立乙個生成樹的鄰接表的頂點節點

for(i=0; ifirst_edge; f!=nullptr; f=f->next)

}//按照權重大小排序

sort(mst_temp.begin(),mst_temp.end());

//根據權重從小到大遍歷弧

for(i=0;ifirst_edge;

delete vernode_list[i];

while(s!=nullptr)

}}int main()

; adjlist mt2;

cout<<"建立鄰接表"

cout

cout

return 0;

}

《大話資料結構》之Kruskal演算法

需要先對邊按權重排序,或者每次要查詢最小權重的邊。同時用類似於陣列鍊錶的方式,記錄每個頂點之間的連線關係。因為需要避免形成環路。typedef struct edge int find int parent,int f return f void minispantree kruskal mgrap...

資料結構與演算法之並查集

並查集結構可以用於 1 檢查兩個元素是否屬於同乙個集合 比如對於圖1這個例子來說,如果我們想要檢查節點d和節點e是否屬於同乙個集合,可以這樣操作 d節點往上找其父節點,一直往上找,直到某個節點的父節點是其本身,此時停止 找到了節點a e節點也按照相同的步驟往上找其父節點,找到節點a 如果這兩個節點往...

資料結構與演算法之並查集

並查集 union find 是一種高效的資料結構,主要的操作有 為方便敘述,把所有元素視作點,元素之間的關係視作線,存在聯絡便存在關係 需要注意的是,這裡的關係應當是1.自反的,2.對稱的,3.傳遞的 所謂合併,便是將兩個點之間 畫 一條線。又上邊的定義不難理解相連的若干點之間互相存在關係,這樣我...