華電北風吹
日期:2016/1/16
常用的最小生成樹演算法有prime演算法和kruskal演算法。prime演算法基於節點,kruskal基於邊。
1、prime演算法
prime演算法屬於貪心演算法,與廣度優先搜尋類似。保持乙個屬於已發現的最小生成樹節點的集合。每一次從未在樹中的節點中選擇乙個與當前樹中節點集合距離最近的節點,將這個邊和節點加入到樹中。為了方便一般用乙個陣列來記錄所有節點到樹中節點的距離,選擇樹根節點以後,最小生成樹每新增乙個節點就遍歷這個節點的邊表,更新未選擇節點到這個樹的距離。
參考**:
#include
#include
#include
using
namespace
std;
int prime(vector
> dist)
for (int i = 1; i < n; i++)
}for (int k = 0; k < n; k++)}}
result += mindist;
visited[activite_index] = true;
activite_index = p;
}return result;
}int main(int argc, char* argv)
}cout
<< prime(map) << endl;
return
0;}
2、kruskal演算法
kruskal演算法也屬於貪心演算法。kruskal先對所有的邊排序,每次選擇邊在保證不構成環的前提下,選擇權重最小的邊,直到把所有節點連線成乙個樹。演算法實現一般採用並查集,可以很快的判斷是否有環。
參考**:
#include
#include
#include
#include
using
namespace
std;
int n, m;
int f[100001];
void make_set()
int getfather(int a)
void union(int a, int b)
}struct edge
};bool compare(edge e1, edge e2)
int main()
sort(v.begin(), v.end(), compare);
make_set();
int k = 0;
for (int i = 0; i < m; i++)
}cout
<< result << endl;
system("pause");
return
0;}
演算法導論 最小生成樹擴充套件
一,次最小生成樹 定義 設t是圖g的最小生成樹,如果t1滿足 t1 min,則t1是g的次小生成樹。解釋 除了最小生成樹外,另外乙個生成樹的權值和最小的生成樹,定義為次最小生成樹。經典題目 poj1679 the unique mst,對於一張圖,判斷最小生成樹是否惟一。惟一的定義是 不存在第二棵生...
演算法導論 最小生成樹(prim演算法)
一,定義 沒有權值時 乙個有n個節點的聯通圖,生成樹是,極小聯通子圖。包含圖中所有節點,且有保持圖聯通的最少的邊。邊有權值時 無向聯通圖g v,e 權值函式,w e r。找到g的一棵最小生成樹,使得 w t 最小。w t 為最小生成樹所有邊權值和。二,prime演算法 1 初始化 u te 節點集u...
演算法導論小結 10 最小生成樹
by 潘雲登 對於商業目的下對本文的任何行為需經作者同意。寫在前面 1.本文內容對應 演算法導論 第 2版 第 23章。2.主要介紹了兩種構建最小生成樹的方法 kruskal 演算法和prim 演算法。3.kruskal 演算法和prim 演算法,可以以鄰接表表示的圖為基礎 可參考 圖的表示與搜尋 ...