



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第Java實現(xiàn)Kruskal算法的示例代碼目錄介紹一、構(gòu)建后的圖二、代碼三、測試
介紹
構(gòu)造最小生成樹還有一種算法,即Kruskal算法:設(shè)圖G=(V,E)是無向連通帶權(quán)圖,V={1,2,...n};設(shè)最小生成樹T=(V,TE),該樹的初始狀態(tài)只有n個節(jié)點而無邊的非連通圖T=(V,{}),Kruskal算法將這n個節(jié)點看成n個孤立的連通分支。它首先將所有邊都按權(quán)值從小到大排序,然后值要在T中選的邊數(shù)不到n-1,就做這樣貪心選擇:在邊集E中選擇權(quán)值最小的邊(i,j),如果將邊(i,j)加入集合TE中不產(chǎn)生回路,則將邊(i,j)加入邊集TE中,即用邊(i,j)將這兩個分支合并成一個連通分支;否則繼續(xù)選擇下一條最短邊。把邊(i,j)從集合E中刪去,繼續(xù)上面的貪心選擇,直到T中的所有節(jié)點都在同一個連通分支上為止。此時,選取的n-1條邊恰好構(gòu)成圖G的一棵最小生成樹T。
Kruskal算法用一種非常聰明的方法,就是運用集合避圈;如果所選擇加入邊的起點和終點都在T集合中,就可以斷定會形成回路,變的兩個節(jié)點不能屬于同一個集合。
算法步驟
1初始化。將所有邊都按權(quán)值從小到大排序,將每個節(jié)點集合號都初始化為自身編號。
2按排序后的順序選擇權(quán)值最小的邊(u,v)。
3如果節(jié)點u和v屬于兩個不同的連通分支,則將邊(u,v)加入邊集TE中,并將兩個連通分支合并。
4如果選取的邊數(shù)小于n-1,則轉(zhuǎn)向步驟2,否則算法結(jié)束。
一、構(gòu)建后的圖
二、代碼
packagegraph.kruskal;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.List;
importjava.util.Scanner;
publicclassKruskal{
staticfinalintN=100;
staticintfa[]=newint[N];
staticintn;
staticintm;
staticEdgee[]=newEdge[N*N];
staticListEdgeedgeList=newArrayList();
static{
for(inti=0;ie.length;i++){
e[i]=newEdge();
//初始化集合號為自身
staticvoidInit(intn){
for(inti=1;ii++)
fa[i]=i;
//合并
staticintMerge(inta,intb){
intp=fa[a];
intq=fa[b];
if(p==q)return0;
for(inti=1;ii++){//檢查所有結(jié)點,把集合號是q的改為p
if(fa[i]==q)
fa[i]=p;//a的集合號賦值給b集合號
return1;
//求最小生成樹
staticintKruskal(intn){
intans=0;
Collections.sort(edgeList);
for(inti=0;ii++)
if(Merge(edgeList.get(i).u,edgeList.get(i).v)==1){
ans+=edgeList.get(i).w;
n--;
if(n==1)//n-1次合并算法結(jié)束
returnans;
return0;
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
n=scanner.nextInt();
m=scanner.nextInt();
Init(n);
for(inti=1;ii++){
e[i].u=scanner.nextInt();
e[i].v=scanner.nextInt();
e[i].w=scanner.nextInt();
edgeList.add(e[i]);
System.out.println("最小的花費是:"+Kruskal(n));
classEdgeimplementsComparable{
intu;
intw;
intv;
@Override
publicintcompareTo(Objecto){
if(this.w((Edge)o).w){
re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職員保密協(xié)議書
- 破壞草坪協(xié)議書
- 草原保護協(xié)議書
- 攪拌站租賃合同協(xié)議書
- 途中安全協(xié)議書
- 苗木代賣協(xié)議書
- 老年旅行協(xié)議書
- 電氣元器件合作協(xié)議書
- 租車返傭協(xié)議書
- 巧媳婦扶貧工程協(xié)議書
- 湖北省10kV及以下配電網(wǎng)設(shè)施配置技術(shù)規(guī)范
- 星巴克VI系統(tǒng)設(shè)計分析課件
- 質(zhì)量工程師工作簡歷
- 深圳初中英語7、8、9 年級單詞表匯總
- 互聯(lián)網(wǎng)金融時代大學(xué)生消費行為影響因素研究
- 食品藥品安全監(jiān)管的問題及對策建議
- 信號檢測與估計知到章節(jié)答案智慧樹2023年哈爾濱工程大學(xué)
- 國家開放大學(xué)一平臺電大《法律社會學(xué)》我要考形考任務(wù)2及3題庫答案
- 公司收文處理箋
- 6G 移動通信系統(tǒng)
- 環(huán)境因素識別評價表(一)
評論
0/150
提交評論