最小生成樹C語言學習

2022-02-12 18:38:13 字數 813 閱讀 1226

**

#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的生成樹,而各邊權和最小的生成樹則被稱...