**
#include #include #define max 100#define maxcost 0x7fffffff
int graph[max][max];
int prim(int graph[max], int n)
/* 標記1號節點加入生成樹 */
mst[1] = 0;
/* n個節點至少需要n-1條邊構成最小生成樹 */
for (i = 2; i <= n; i++)
}/* 輸出生成樹邊的資訊:起點,終點,權值 */
printf("%c - %c : %d\n", mst[minid] + 'a' - 1, minid + 'a' - 1, min);
/* 累加權值 */
sum += min;
/* 標記節點minid加入生成樹 */
lowcost[minid] = 0;
/* 更新當前節點minid到其他節點的權值 */
for (j = 2; j <= n; j++)
}} /* 返回最小權值和 */
return sum;
}int main()
} /* 讀取邊資訊 */
for (k = 0; k < n; k++)
/* 求解最小生成樹 */
cost = prim(graph, m);
/* 輸出最小權值和 */
printf("total:%d\n", cost);
//system("pause");
return 0;
}
C 最小生成樹
樹是指沒有環路的圖,生成樹就是指乙個圖上面刪除一些邊,使它沒有環路。最小生成樹就是指生成樹中邊權之和最小的那一種。上圖的最小生成樹就是這樣 就以上圖為例 先選擇乙個起始點,我們就以a為例。建立乙個集合s,用來儲存已經在樹中間的點。開始時集合那只有點a,即 s 選擇乙個連通到集合s中乙個點的最小邊,其...
C語言 最小生成樹(Kruskal演算法)
建立邊集圖 createedgegraph 列印圖 print 排序函式 sort 頂點下標查詢函式 locatevex 查詢雙親函式 findroot 克魯斯卡爾演算法 minispantree kruskal typedef struct edge 邊集陣列edge的單元 typedef str...
最小生成樹 次小生成樹
一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...