日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构---prim最小生成树

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构---prim最小生成树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構—prim最小生成樹

原理:參考趣學數據結構

代碼:

#include<stdio.h> #include<stdlib.h> #define N 100 #define elemType int //const int MAX_INT = (1 << 31) - 1; //const int MAX_INT = 0X7fffffff; #define INF (((unsigned int)(-1)) >> 1) bool visited[N]; typedef struct GraphMatrix {elemType vNode[N][N];int vNum, eNum; }GraphMatrix; void initGMaxtix(GraphMatrix &G) {//初始化鄰接矩陣printf("輸入頂點數和邊數\n");scanf_s("%d%d", &G.vNum, &G.eNum);for (int i = 0; i < G.vNum; i++) {//初始化鄰接矩陣for (int j = 0; j < G.vNum; j++) {G.vNode[i][j] = INF;}}printf("輸入頂點v1到頂點v2和其邊的權重\n");for (int i = 0; i < G.eNum; i++) {int v1, v2, weights;scanf_s("%d%d%d", &v1, &v2, &weights);G.vNode[v1][v2] = weights;} } void print15(GraphMatrix G) {printf("鄰接矩陣如下:\n");for (int i = 0; i < G.vNum; i++) {for (int j = 0; j < G.vNum; j++) {printf("%d ", G.vNode[i][j]);}printf("\n");} } void prim(GraphMatrix G, int u0) {//最小生成樹int lowcost[N], closeV[N];for (int i = 0; i < G.vNum; i++) {//初始化lowcost[i] = G.vNode[u0][i];closeV[i] = u0;if (u0 == i) {lowcost[u0] = 0;}}visited[u0] = true;printf("%d ", u0);for (int k = 0; k < G.vNum - 1; k++) {//最小生成樹 頂點數-1條邊int t = u0, Temp = INF;for (int i = 0; i < G.vNum; i++) {//尋找連接兩個集合最短邊(已經訪問和未被訪問)if (!visited[i] && Temp > lowcost[i]) {Temp = lowcost[i];t = i;}}if (t == u0) {break;}visited[t] = true;printf("%d ", t);for (int i = 0; i < G.vNum; i++) {//因為新結點的加入,可能會縮短兩個頂點集合之間的距離,更新操作if (!visited[i]&&G.vNode[t][i] < lowcost[i]) {lowcost[i] = G.vNode[t][i];closeV[i] = t;}}}printf("\n哪些邊有關系:\n");for (int i = 0; i < G.vNum; i++) {if (i != u0) {printf("%d---%d有邊\n", i, closeV[i]);}} } int main() {GraphMatrix G;initGMaxtix(G);print15(G);printf("\n");for (int i = 0; i < G.vNum; i++) {visited[i] = false;}printf("prim最小生成樹\n");prim(G, 0);printf("\n");system("pause");return 0; }

測試截圖:

時間復雜度O(n x n),空間復雜度O(n)

如果存在什么問題,歡迎批評指正!謝謝!

總結

以上是生活随笔為你收集整理的数据结构---prim最小生成树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。