kruskal演算法(一)之 c語言詳解
prim 在稠密圖中比 kruskal 優,在稀疏圖中比 kruskal 劣。
kruskal:時間複雜度由排序演算法決定,若採用快排則時間複雜度為o(n*logn)
networking
#include
#include
#include
#include
#include
using namespace std;
int pre[
120010];
//祖先
struct nodet[
120010];
bool cmp
(node a,node b)
intfind
(int x)
intmerge
(int x,
int y)
//合併
else
}int
main()
} cout<}return0;
}
building a space station
#include
#include
#include
#include
#include
#include
using namespace std;
int n;
int pre[
110]
;//祖先
//邊
struct nodet[
120010];
//球的座標,半徑
struct node2ball[
200]
; bool cmp
(node a,node b)
intfind
(int a)
return a;
}int
judge
(int x,
int y)
//檢查
else
}int
init()
intmain()
}sort
(t,t+num,cmp)
;int numm=0;
double sum=0;
for(
int i=
0;i(numm==n-1)
break;}
printf
("%.3f\n"
,sum);}
return0;
}
jungle roads
#include
#include
#include
using namespace std;
const
int n=30;
const
int m=
150;
char c;
int n,num;
int pre[n]
;struct nodep[m]
;bool cmp
(node a,node b)
intfind
(int x)
void
init()
intkruskal()
}return sum;
}int
main()
}sort
(p+1
,p+num,cmp)
;printf
("%d\n"
,kruskal()
);}return0;
}
constructing roads
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const
int max=
110;
int pre[max]
;int n;
int test=0;
int num=0;
struct noderoad[
40010];
bool cmp
(node a,node b)
void
init
(int v)
intfind
(int x)
bool join
(int a,
int b)
return0;
}int
kruskal()
}return sum;
}int
main()
}int q;
cin>>q;
for(
int i=
0;i)sort
(road+
1,road+num+
1,cmp)
;
cout<<
kruskal()
<}return0;
}
克魯斯卡爾Kruskal
在b 國裡,有n 個城市,每個城市有乙個發達程度a i b 要修建一些道路,修建這條道路的花費為cost i 把這些城市連起來,使得任意2 個城市之間,有且只有1 條路相聯通。最後這些道路建成時,每個城市對b 國的經濟會做出貢獻,貢獻度為a i i 這個城市它所直接相連的城市數 但由於b 國的人民只...
kruskal克魯斯卡爾演算法
給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用 邊集陣列 且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間 方法 將圖中邊按其權值由小到大的次序順序選取,...
克魯斯卡爾演算法 Kruskal
克魯斯卡爾 kruskal 演算法是一種按權值的遞增次序選擇合適的邊來構造最小生成樹的方法。假設g v,e 是乙個具有 n 個頂點的帶權連通圖,t u,t e 是g 的最小生成樹,則構造最小生成樹的步驟如下 1 設定 u的初值等於 v 即包含有 g中的全部頂點 te 的初值為空集 即圖 t 中每乙個...