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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通1349-最优布线问题

發(fā)布時(shí)間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通1349-最优布线问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目描述】

學(xué)校有n臺(tái)計(jì)算機(jī),為了方便數(shù)據(jù)傳輸,現(xiàn)要將它們用數(shù)據(jù)線連接起來。兩臺(tái)計(jì)算機(jī)被連接是指它們有數(shù)據(jù)線連接。由于計(jì)算機(jī)所處的位置不同,因此不同的兩臺(tái)計(jì)算機(jī)的連接費(fèi)用往往是不同的。
當(dāng)然,如果將任意兩臺(tái)計(jì)算機(jī)都用數(shù)據(jù)線連接,費(fèi)用將是相當(dāng)龐大的。為了節(jié)省費(fèi)用,我們采用數(shù)據(jù)的間接傳輸手段,即一臺(tái)計(jì)算機(jī)可以間接的通過若干臺(tái)計(jì)算機(jī)(作為中轉(zhuǎn))來實(shí)現(xiàn)與另一臺(tái)計(jì)算機(jī)的連接。
現(xiàn)在由你負(fù)責(zé)連接這些計(jì)算機(jī),任務(wù)是使任意兩臺(tái)計(jì)算機(jī)都連通(不管是直接的或間接的)。


【輸入】

第一行為整數(shù)n(2≤n≤100),表示計(jì)算機(jī)的數(shù)目。此后的n行,每行n個(gè)整數(shù)。第x+1行y列的整數(shù)表示直接連接第x臺(tái)計(jì)算機(jī)和第y臺(tái)計(jì)算機(jī)的費(fèi)用。

【輸出】

一個(gè)整數(shù),表示最小的連接費(fèi)用。


【輸入樣例】

3
0 1 2
1 0 1
2 1 0

【輸出樣例】

2


【提示】

注:表示連接1和2,2和3,費(fèi)用為2。


解題思路

就是最小生成樹而已,這里用時(shí)間復(fù)雜度是O(n^2)的算法(既Prim法)。


代碼

#include<cstdio> using namespace std; int n,k,cost[101][101],lowcost[101],x,s; bool ok[101]; int main() {scanf("%d",&n);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++) cost[i][j]=23333333;//初始化無窮大for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){scanf("%d",&cost[i][j]);//輸入權(quán)值}}for (int i=1;i<=n;i++) lowcost[i]=cost[1][i];//記錄每個(gè)點(diǎn)到目前集合最小花費(fèi)ok[1]=true;//標(biāo)記為以搜過for (int i=2;i<=n;i++){int k=0,mins=23333333;for (int j=1;j<=n;j++)if (!ok[j] && lowcost[j]<mins){mins=lowcost[j];k=j;//找并且記錄最小值}ok[k]=true;//標(biāo)記,更新集合s+=lowcost[k];//記錄總值for (int j=1;j<=n;j++)if (lowcost[j]>cost[k][j]) lowcost[j]=cost[k][j]; //更新每個(gè)點(diǎn)到目前集合最小花費(fèi)}printf("%d",s); }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通1349-最优布线问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。