•
kruskal演算法
– 出發點
:要使生成樹上邊的權值之和達到最小,則應
使其中每一條邊的權值盡可能地小。
– 具體步驟
對於圖
(v, e),有n
個節點,求解最小生成樹 te
• 1.
構造乙個只含n個
頂點的子圖sg
• 2.
找到一條權值最小的邊
e,若加入e能是
sg不構成迴路,則加上邊e到
sg • 3.
重複操作
2,次數為
n-1
#include
#include
#include
#include
using namespace std;
const int max_num = 100;
typedef struct edge edge;
edge edge[max_num]; /* 儲存邊*/
int node[max_num]; /*儲存對應頂點的祖先*/
bool cmp(const edge &e1, const edge &e2)
/* 尋找節點x的祖先
例如node[2]=1 node[8]=1 ,node[3]=1,
共同的祖先是1, 如果此時加入邊(3,8)加進去,則構成迴路,
不能加入到最小生成樹中*/
int find(int x)
int kruskal(int n, int e) /*n: 頂點數e:邊數*/
else
}/*迭代次數達標,已經產生了n-1條邊,構成了最小生成樹*/
if (count == n-1)
break;
}return ret;
}int main()
cout << kruskal(e) << endl;
return 0;
}
最小生成樹 克魯斯卡爾演算法
c node.h檔案 儲存頂點資訊 class c node c node c node c node p node c node c node c node c node char p data node.h檔案,儲存邊資訊 include class link node link node li...
最小生成樹( 克魯斯卡爾演算法)
name author date 01 12 14 20 17 description 最小生成樹 克魯斯卡爾演算法 關於並查集的演算法,參見 一種簡單而有趣的資料結構 並查集 include include define maxn 1000 最大頂點數量 define max 20000 最大邊數...
最小生成樹 克魯斯卡爾演算法
之前學了用普里姆演算法來求最小生成樹的權值和,但是它的時間複雜度為o v2 使用優先順序佇列優化後,可以優化為o e log v 克魯斯卡爾演算法可以在o e log e 的時間複雜度內,求出最小生成樹 克魯斯卡爾演算法的核心就是對邊進行公升序排序,然後從權值最小的邊開始,加入最小生成樹中,然後利用...