666 專題十一 最小生成樹

2022-03-07 13:23:15 字數 2653 閱讀 3190

problem a.jungle roads

d.s.沒什麼好說的,最小生成樹

c.

/*

kruskal演算法

kruskal演算法求mst

*/#include

#include

#include

#include

using

namespace

std;

const

int maxn=110;//

最大點數

const

int maxm=10000;//

最大邊數

int f[maxn];//

並查集使用

struct

edgeedge[maxm];

//儲存邊的資訊,包括起點/終點/權值

int tol;//

邊數,加邊前賦值為0

void addedge(int u,int v,int

w)//

排序函式,將邊按照權值從小到大排序

bool

cmp(edge a,edge b)

int find(int

x)//

傳入點數,返回最小生成樹的權值,如果不連通返回-1

int kruskal(int

n)

if(cnt==n-1)break

; }

if(cnt1)return -1;//

不連通else

return

ans;

}int

main()

}printf(

"%d\n

",kruskal(n));

}return0;

}

view code

problem b.networking

c.

/*

prim演算法

prim求mst

耗費矩陣cost,標號從0開始,0~n-1

返回最小生成樹的權值,返回-1表示原圖不連通

*/#include

#include

#include

using

namespace

std;

const

int inf=0x3f3f3f3f

;const

int maxn=110

;bool

vis[maxn];

intlowc[maxn];

//點是 0 n-1

int prim(int cost[maxn],int

n)

if(minc==inf)return -1;//

原圖不連通

ans+=minc;

vis[p]=true

;

for(int j=0;j)

if(!vis[j]&&lowc[j]>cost[p][j])

lowc[j]=cost[p][j];

}return

ans;

}int

main()

}scanf("%d

",&r);

for(int i=0;ii)

}printf(

"%d\n

",prim(cost,p));

}return0;

}

view code

problem c.building a space station

c.

/*

prim演算法

prim求mst

耗費矩陣cost,標號從0開始,0~n-1

返回最小生成樹的權值,返回-1表示原圖不連通

*/#include

#include

#include

#include

using

namespace

std;

const

double inf=1e10;

const

int maxn=110

;bool

vis[maxn];

double

lowc[maxn];

//點是 0 n-1

double prim(double cost[maxn],int

n)

if(minc==inf)return -1;//

原圖不連通

ans+=minc;

vis[p]=true

;

for(int j=0;j)

if(!vis[j]&&lowc[j]>cost[p][j])

lowc[j]=cost[p][j];

}return

ans;

}int

main()

}for(int i=0;ii)

for(int i=0;ii)

else}}

printf(

"%.3f\n

",prim(cost,n));

}return0;

}

view code

problem l.還是暢通工程

hint.題解見以前

problem n.暢通工程再續

hint.題解見以前

最小生成樹專題

首先來回顧一下最小生成樹的概念 在一給定的無向圖 g v,e 中,u,v 代表連線頂點 u 與頂點 v 的邊 即 而 w u,v 代表此邊 的權重,若存在 t 為 e 的子集 即 且為無迴圈圖,使得 的 w t 最小,則此 t 為 g 的最小生成樹。最小生成樹其實是最小權重生成樹的簡稱。簡單地說,就...

最小生成樹專題

一 prim演算法 poj1258 有n個農場,已知這n個農場都互相相通,有一定的距離,現在每個農場需要裝光纖,問怎麼安裝光纖能將所有農場都連通起來,並且要使光纖距離最小,輸出安裝光纖的總距離 資料 幾個點,矩陣表示各點中間的距離 40 4 9 21 4 0 8 17 9 8 0 16 21 17 ...

專題 最小生成樹 一

這個專題我們討論的問題是在無向圖中尋找一棵最小生成樹 minimum spanning tree 這個問題對於有向圖的討論也是有意義的,只不過演算法更加複雜,這裡我們將只討論無向圖。最小生成樹存在當且僅當圖是連通的。此處我們不對概念做過多的介紹,直接介紹兩種主要的演算法 1.kruskal演算法 2...