1.最小生成树(Minmum-cost spinning tree)
1.1性质
1.2算法分析
算法 | 方法 | T(N) |
---|---|---|
Prim | 距离矩阵 | |
Prim | 优先队列 | |
Kruskal | 堆 |
2.Prim算法
2.1算法核心
与Dijkstra最短路径算法:
if(D[w]>D[v]+G->weight(v,w))
D[w]=D[v]+G->weight(v,w);
不同,Prim最小生成树算法
if(D[w]>G->weight(v,w)){
D[w]=G->weight(v,w);
其余和Dijkstra算法一致
2.2代码
距离矩阵:
int minVertex(Graph* G){
}
//Prim
void Prim(Graph* G,int* D,int s){
int pre[G->n()];
for(int i=0;i<G->n();i++)
D[i]=INFINITY;
D[s]=0;
for(int i=0;i<G->n();i++){
int v=minVertex(G);
G->setMark(v,VISITED)
if(D[v]==INFINITY)
return;
for(int w=G->first(v);w<G->n();w=G->