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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀

發(fā)布時間:2023/12/4 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:題目

某地區(qū)經過對城鎮(zhèn)交通狀況的調查,得到現有城鎮(zhèn)間快速道路的統計數據,并提出“暢通工程”的目標:使整個地區(qū)任何兩個城鎮(zhèn)間都可以實現快速交通(但不一定有直接的快速道路相連,只要互相間接通過快速路可達即可)。現得到城鎮(zhèn)道路統計表,表中列出了任意兩城鎮(zhèn)間修建快速路的費用,以及該道路是否已經修通的狀態(tài)。現請你編寫程序,計算出全地區(qū)暢通需要的最低成本。

輸入格式:
輸入的第一行給出村莊數目N (1≤N≤100);隨后的N(N?1)/2行對應村莊間道路的成本及修建狀態(tài):每行給出4個正整數,分別是兩個村莊的編號(從1編號到N),此兩村莊間道路的成本,以及修建狀態(tài) — 1表示已建,0表示未建。

輸出格式:
輸出全省暢通需要的最低成本。

輸入樣例:

4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0

輸出樣例:

3

二:思路

這個就是Prime算法的變型,我想的是如果這條路是已經修過,那么的話就將其的權值你設為0

三:上碼

/**思路:如果是已經修過,那么的話就將其的權值你設為0*/ #include<bits/stdc++.h> using namespace std;typedef struct GNode* PtrGraph;typedef struct GNode{int Nv;int Ne;int Data[105][105]; }gnode;int N; //利用鄰接矩陣儲存圖的基本信息 void CreateGraph(PtrGraph G){cin >> N;G->Nv = N;G->Ne = N*(N-1)/2;//矩陣初始化 for(int i = 1; i <= G->Nv; i++){for(int j = 1; j <= G->Nv; j++){G->Data[i][j] = 0; }}//矩陣賦值for(int i = 0; i < G->Ne; i++){int a,b,c,d;cin >> a >> b >> c >> d; if(d == 0){G->Data[a][b] = c;G->Data[b][a] = c; } } } //輸出矩陣 void print_Graph(PtrGraph G){for(int i = 1; i <= G->Nv; i++){for(int j = 1; j <= G->Nv; j++){cout << G->Data[i][j] << ' ';}cout << endl;} } //Prime最小成樹的算法 void Prime(PtrGraph G){int dist[105];int visited[105] = {0};int count = 0;for(int i = 1; i <= G->Nv; i++){dist[i] = G->Data[1][i];//將符號為1到其他點的距離存在 dist數組中 }visited[1] = 0;count++;while(1){int m = -1;int infinite = 9999;//求取最小值for(int i = 1; i <= G->Nv; i++){if(dist[i] < infinite && visited[i] != 1){infinite = dist[i];m = i;}}visited[m] = 1;count++;if(m == -1){break;} //更新for(int i = 1; i <= G->Nv; i++){if(visited[i] != 1 && G->Data[m][i] < dist[i] ){dist[i] = G->Data[m][i];}} } int sum = 0;for(int i = 1; i <= G->Nv; i++){sum += dist[i];}cout << sum;} int main(){PtrGraph G = (PtrGraph)malloc(sizeof(struct GNode));CreateGraph(G); // print_Graph(G);Prime(G);}


加油BOY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

總結

以上是生活随笔為你收集整理的7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀的全部內容,希望文章能夠幫你解決所遇到的問題。

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