1348:【例4-9】城市公交網(wǎng)建設(shè)問題

1348:【例4-9】城市公交網(wǎng)建設(shè)問題

時(shí)間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB

提交數(shù): 5034 ??? 通過數(shù): 1748

【題目描述】

有一張城市地圖,圖中的頂點(diǎn)為城市,無向邊代表兩個(gè)城市間的連通關(guān)系,邊上的權(quán)為在這兩個(gè)城市之間修建高速公路的造價(jià),研究后發(fā)現(xiàn),這個(gè)地圖有一個(gè)特點(diǎn),即任一對城市都是連通的?,F(xiàn)在的問題是,要修建若干高速公路把所有城市聯(lián)系起來,問如何設(shè)計(jì)可使得工程的總造價(jià)最少?

【輸入】

n(城市數(shù),1<≤n≤100)

e(邊數(shù))

以下e行,每行3個(gè)數(shù)i,j,wiji,j,wij,表示在城市i,j之間修建高速公路的造價(jià)。

【輸出】

n-1行,每行為兩個(gè)城市的序號,表明這兩個(gè)城市間建一條高速公路。

【輸入樣例】

5 8

1 2 2

2 5 9

5 4 7

4 1 10

1 3 12

4 3 6

5 3 3

2 3 8

【輸出樣例】

1? 2

2? 3

3? 4

3? 5


呵,畢業(yè)考結(jié)束了,我來做題寫題解了。

有點(diǎn)時(shí)間沒寫了,以后一天3篇吧,把圖這一章搞好。


這道題完全模板題,思路是kruskal算法。

代碼奉上:

#include <bits/stdc++.h>//kruskal算法

using namespace std;

int n,e,fa[105],tot;

struct edge

{

? int u,v,w;

} a[10050];

struct nedge

{

? int u,v;

} b[105];

bool cmp(edge x,edge y) //cmp函數(shù),排序用,排邊長

{

? return x.w<y.w;

}

int find(int x) //查找

{

? if(x==fa[x]) return x;

? return fa[x]=find(fa[x]);

}

void unionn(int x,int y) //連接

{

? int x9=find(x),y9=find(y);

? if(x9!=y9) fa[y9]=x9;//只有100,懶得優(yōu)化合并

}

bool cmp2(nedge x,nedge y) //排序用,排最終答案

{

? if(x.u!=y.u) return x.u<y.u;

? return x.v<y.v;

}

int main()

{

? cin>>n>>e;

? for(int i=1; i<=e; i++)

? {

? ? scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);//輸入

? ? if(a[i].u>a[i].v) swap(a[i].u,a[i].v);//為輸出做準(zhǔn)備

? }

? for(int i=1; i<=n; i++) fa[i]=i; //初始化

? sort(a+1,a+e+1,cmp);//排序

? for(int i=1; i<=e&&tot<n-1; i++) //連接

? {

? ? int x=find(a[i].u),y=find(a[i].v);//根結(jié)點(diǎn)

? ? if(x!=y)

? ? {

? ? ? unionn(x,y);//連接

? ? ? b[++tot].u=a[i].u;

? ? ? b[tot].v=a[i].v;//存放

? ? }

? }

? sort(b+1,b+n,cmp2);//排序

? for(int i=1; i<n; i++)

? ? printf("%d %d\n",b[i].u,b[i].v);//輸出

? return 0;

}


代碼簡單,我不多講,我得去寫新文章去了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容