prim演算法的實現

2021-09-22 05:50:35 字數 1770 閱讀 1803

新增鏈結描述

執行了一下prim 演算法 覺得這個程式還可以 後期可以在此基礎上做較大的改動 故此分享了這個**

#include #define maxvex 10

#define true 1

#define false 0

#define inf 65535//此處是權值極大值

#define length(a) (sizeof(a) / sizeof(a[0]))

typedef char vertextype;

typedef struct

mgraph;

//建立乙個圖

void createmgraphexample(mgraph *g)

;//儲存的頂點

int arc[9] = ,,,

,,,,

,};

g->numvertexes = length(vexs);//頂點數賦值

g->numedges = 0;

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

g->vexs[i] = vexs[i];//給圖的頂點陣列賦值

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

}for(int i = 0; i < g->numvertexes; i++)}}

printf("%d %d\n", g->numvertexes, g->numedges / 2);//這裡在計算圖的邊數的時候 除了2

}//這裡是可以手動建立圖的函式

//由於上面的函式給了示例 如果想要自己手動輸入函式 可以在這裡修改

void createmgraph(mgraph *g)/* 構件圖 */

}g->arc[0][1]=10;

g->arc[0][5]=11;

g->arc[1][2]=18;

g->arc[1][8]=12;

g->arc[1][6]=16;

g->arc[2][8]=8;

g->arc[2][3]=22;

g->arc[3][8]=21;

g->arc[3][6]=24;

g->arc[3][7]=16;

g->arc[3][4]=20;

g->arc[4][7]=7;

g->arc[4][5]=26;

g->arc[5][6]=17;

g->arc[6][7]=19;

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

}}/* prim 演算法生成最小生成樹 */

void minispantree_prim(mgraph g)

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

j++;

}lowcost[k] = 0; /* 將當前頂點的權值設定為0, 表示此頂點已加入樹的頂點集合 取k位置的頂點 並將其加入到樹中去 */

printf("(%d, %d)", adjvex[k], k); /* 列印當前頂點邊中權值最小的邊 */

for(j = 1; j < g.numvertexes; j++) /* 迴圈所有頂點 */}}

}int main()

這是執行的結果

9 14

(0, 1)(0, 5)(1, 8)(8, 2)(1, 6)(6, 7)(7, 4)(7, 3)hello, world!

關於prim演算法的知識請查閱書本!!!

Prim 演算法的實現

最小生成樹除了prim還有kruskal演算法。prim演算法的實現,用到了優先佇列。include include include include include include include include include using namespace std 邊表 class edgeno...

Prim演算法實現

include stdio.h define max vertex num 20 typedef struct arccellarccell,adjmatrix max vertex num max vertex num typedef struct mgraph struct closedge m...

Prim演算法實現

prim 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 4...