Prim演算法求MST 最小生成樹

2021-07-10 11:22:54 字數 2007 閱讀 4688

prim演算法求最小生成樹使用的圖的儲存結構是圖的鄰接矩陣

#include#define max_vertax_size 20

#define infinite 65535

#define ok 1

#define error 0

//圖的鄰接矩陣表示的結構定義

typedef int status;

typedef char vertaxelemtype;

typedef struct graphamgrapham;

//用於prim演算法的輔助結構:

typedef struct mincosteagemincosteage;

int locatevertax(grapham g, vertaxelemtype c)

return -1;

}status createudg(grapham* g)

for( i = 0; i < g->vertaxnum; i++ )

for( j = 0; j < g->vertaxnum; j++ )

g->adjacencymatrix[i][j] = infinite;

for( i = 0; i < g->eagenum; i++ )

return ok;

}void printadjacencymatrix(grapham g)

printf("\n\n"); }}

//求圖g的最小生成樹,從頂點v開始

status prim(grapham g, vertaxelemtype v)

mincost[index_v].lowcost = 0; //已經在mst中的標誌,使得沒有機會參加陣列中lowcost的選取

printf("mst(minimum cost spinning tree):\n");

for( i = 1; i < g.vertaxnum; i++ )

} for( j = 0; j < g.vertaxnum; j++ )

} printf("(%c, %c)\t", mincost[min_index].vertax, g.vertaxarray[min_index]);//陣列的下標儲存了第二個%c的需要的資訊,

//vertax域提供了第乙個%c需要的資訊

mincost[min_index].lowcost = 0;

for( j = 0; j < g.vertaxnum; j++ )

} }}/* mincost陣列:該陣列是結構陣列,即每個元素是乙個結構型別。該結構有兩個域:lowcost用來儲存所有已經在

* 最小生成樹中的頂點,到所有還沒有在最小生成樹中的頂點的所有權值中的最小的;vertax域用

* 來儲存是哪個在最小生成樹中的頂點擁有著這個最小的權值。並且這個陣列的下標隱含著頂點的

* 資訊。例如,第2個陣列元素在程式執行中的某乙個時刻表示:已經形成的mst中的vertax頂點到

* 圖中的第2個頂點的權值為lowcost,並且是樹內頂點和數外頂點鏈結的最小的權值。

* 所以這個陣列要不斷的更新。

* 假設整個生成樹的過程從頂點a開始,那麼這個陣列的初始元素為該圖的鄰接矩陣中頂點a的一行

* (該行表示的是a於其他的頂點的權值),並且將陣列的vertax都設定為a。表示從mst中的頂點a到

* 數外的所有頂點的權值,然後從該陣列中選出lowcost最小的值。為生成樹的第二個頂點。

* 現在樹中有兩個頂點,所以需要比較是哪個頂點和數外的其他頂點的權值比較小,mincost陣列

* 中的資訊是樹中頂點到其他頂點的最小權值,所以和將要加入的新的頂點的鄰接矩陣中的一行(

* 存放的是該頂點與所有其他的頂點的權值)

* 進行比較即可,小的就更新。

Prim演算法求最小生成樹

本文參考 google 資料結構 c語言 prim演算法,求最小生成樹 include include 最小生成樹prim define max 65535 using namespace std struct graph int prim graph g flag 0 1 將0號結點加入集合s i...

Prim演算法求最小生成樹

cost i j 存i和j之間的距離,vis i 記錄i點是否被訪問,lowc j 存所有與j點連線的邊的最小的權值。每次找最小的lowc j 然後。最小生成樹 int prim int cost maxn int n 點是0 n 1 if minc inf return 1 原圖不連通 ans m...

Prim演算法求最小生成樹

樸素prim演算法 1 距離初始化成正無窮 2 n次迭代 找到集合外距離最近的點,賦值給t 3 用t更新其他點到集合的距離 跟狄傑斯塔拉不一樣,狄傑斯塔拉是跟原點的距離 點與集合所有點距離最短的點 st t true 給定乙個n個點m條邊的無向圖,圖中可能存在重邊和自環,邊權可能為負數。求最小生成樹...