ssl 1618
給出n個點的座標,對它們建立乙個最小生成樹,代價就是連線它們的路徑的長度,現要求總長度最小。n的值在100以內,座標值在[-10000,10000].結果保留二位小數
5
0 0
0 1
1 1
1 0
0.5 0.5
2.83
用kru
skal
kruskal
kruska
l演算法做,首先先用勾股定理求出點之間的距離,再做演算法運算就可以了
不懂k ru
skal
kruskal
kruska
l演算法的可以看一下我之前的blo
gblog
blog
#include
#include
#include
#include
using
namespace std;
int father[
101]
,n;double x,y,a[
10001][
10001];
struct node
f[10001];
bool
cmp(node xx,node yy)
intfind
(int x)
//尋找父節點
void
merge
(int x,
int y)
//合併
intmain()
;//記錄連邊
}int k=0;
double ans=0;
sort
(f+1
,f+t+
1,cmp)
;for
(int i=
1; i<=t;
++i)
if(k==n-1)
break;}
printf
("%.2lf"
,ans)
;}
kruskal 並查集優化
這兩天搞dp搞的快暴了,想學學網路流。拿過算導來一看,最短路還沒整完呢。寫了乙個用並查集優化的kruskal演算法,並查集是用非遞迴的狀態壓縮實現的。詳見 kruskal沒有用堆優化,不是我不想,而是實在不會。所以直接用sort按權值排了下序,時間複雜度o n n logn my code incl...
Kruskal 演算法 並查集
需要注意的地方 將所有的邊權從小到大依次排序,按從小到大依次加入邊,每次對加入的邊進行如下操作 1.找出邊的兩點。2.判斷兩點的父親節點是在同乙個集合裡。3.如果不在同乙個集合,在將兩點所在的集合合併 union,且計數器 1 5.當計數器 n 1 總點數 時 停止查詢。此時只有乙個集合,該集合即為...
Kruskal演算法的並查集實現
最小生成樹的kruskal演算法的偽 如下 w i 為邊的權值,u i v i 分別為邊的端點的下標 mst為最小生成樹的所有邊的結合 n為頂點的個數 m為邊的個數 將邊按權值排序w 0 w 1 w m 1 初始化每個頂點屬於不同的連通分量 for i 0 i include using names...