資料結構 畫畫 最小生成樹(Prim演算法)

2021-09-07 01:47:20 字數 1419 閱讀 2739

通訊網路的最小生成樹配置,它是使右側的生成樹值並最小化。經常使用prim和kruskal演算法。看prim演算法:以防萬一n=}它是在通訊網路,te它是n設定邊的最小生成樹。從演算法u=(uo屬於v)。te={}開始,復執行下述操作:在全部u屬於u。v屬於v-u的邊(u,v)屬於e中找到代價最小的一條邊(u0,v0)併入集合te,同一時候v0併入u,直至u=v為止。此時te中必有n-1條邊,t=}為n的最小生成樹。

為實現此演算法,需另設乙個輔助陣列closedge,以記錄從u到v-u中具有最小權值的邊。每次有新的頂點併入u,就要更新一次closedge。

詳細**例如以下:

#include #include #include #include "../header.h"

using namespace std;

//普里姆演算法構造最小生成樹

const int max_vertex_num=20; //最大頂點數

typedef enum graphkind ;//(有向圖。有向網。無向圖,無向網)

typedef int vrtype;

typedef char infotype;

typedef char vertextype;

#define infinity int_max

typedef struct arccell

}arccell,adjmatrix[max_vertex_num][max_vertex_num];

typedef struct mgraphmgraph;

//記錄從頂點集u到v-u的代價最小的邊的輔助陣列定義

typedef struct minedgeminedge,closedge[max_vertex_num];

int minimum(mgraph g,closedge closedge)

return min;

}int locatevex(mgraph g,vertextype v1)

for(int i=0;i>v1>>v2>>weight;

i=locatevex(g,v1); j=locatevex(g,v2);

g.arcs[i][j].adj=weight;

g.arcs[j][i].adj=weight;

if(info!=48)

}return ok;

}void dismgraph(mgraph m)

cout<}

}//普里姆演算法

void minispantree_prim(mgraph g,vertextype u)

closedge[p].lowcost=0;

closedge[p].adjvex=u;

int k=0;

for(int i=1;i}

}}int main()

資料結構 最小生成樹(Prim演算法)

演算法思想 假設n p,是連通圖,te是n上最小生成樹中邊的集合。演算法從u u0 v 開始。重複執行下述操作 在所有u u,v v u的邊 u,v e中找一條代價最小的邊 u0,v0 併入集合te,同時v0併入u,直到u v為止。此時te中必有n 1條邊,則t v,為n的最小生成樹。define ...

資料結構 Prim演算法 最小生成樹

資料結構上機要求用prim演算法求最小生成樹。首先應該明白prim演算法思想,即在乙個網狀圖n v,中,假設m是圖n最小生成樹邊的集合。再設有u和v兩個點集合,從u u0 v m 開始,進入迴圈操作 找出從點集u到點集v u代價最小的邊 u0,v0 u0 u,v0 v u.並把邊併入邊集m中,v0也...

資料結構 prim演算法 最小生成樹

乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。選擇乙個點作為起點 判斷連線每個節點的度 選擇最小的 每進乙個節點 標記已經來過 如果乙個節點所連線的節點都走過了 那麼就退一步 繼續尋找連線邊 選擇最小的 include defin...