版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)5 最小生成樹算法的設(shè)計(jì)與實(shí)現(xiàn)1、 實(shí)驗(yàn)?zāi)康?、根據(jù)算法設(shè)計(jì)需要, 掌握連通圖的靈活表示方法;2、掌握最小生成樹算法,如Prim、Kruskal算法;3、基本掌握貪心算法的一般設(shè)計(jì)方法;4、進(jìn)一步掌握集合的表示與操作算法的應(yīng)用。2、 實(shí)驗(yàn)內(nèi)容1、認(rèn)真閱讀算法設(shè)計(jì)教材和數(shù)據(jù)結(jié)構(gòu)教材內(nèi)容, 熟習(xí)連通圖的不同表示方法和最小生成樹算法;2、設(shè)計(jì)Kruskal算法實(shí)驗(yàn)程序。有n個(gè)城市可以用(n-1)條路將它們連通,求最小總路程的和。設(shè)計(jì)測試問題,修改并調(diào)試程序, 輸出最小生成樹的各條邊, 直至正確為止。3、 Kruskal算法的原理方法邊權(quán)排序:1 3 14 6 23 6 41 4 52 3 53
2、4 52 5 61 2 63 5 65 6 61. 初始化時(shí):屬于最小生成樹的頂點(diǎn)U=不屬于最小生成樹的頂點(diǎn)V=1,2,3,4,5,62. 根據(jù)邊權(quán)排序,選出還沒有連接并且權(quán)最小的邊(1 3 1),屬于最小生成樹的頂點(diǎn)U=1,3,不屬于最小生成樹的頂點(diǎn)V=2,4,5,63. 根據(jù)邊權(quán)排序,選出還沒有連接并且權(quán)最小的邊(4 6 2),屬于最小生成樹的頂點(diǎn)U=1,3,4,6(還沒有合在一起,有兩顆子樹),不屬于最小生成樹的頂點(diǎn)V=2,54. 根據(jù)邊權(quán)排序,選出還沒有連接并且權(quán)最小的邊(3 6 4),屬于最小生成樹的頂點(diǎn)U=1,3,4,6(合在一起),不屬于最小生成樹的頂點(diǎn)V=2,55. 根據(jù)邊權(quán)排
3、序,選出還沒有連接并且權(quán)最小的邊(3 6 4),屬于最小生成樹的頂點(diǎn)U=1,2,3,4,6,,不屬于最小生成樹的頂點(diǎn)V=56. 根據(jù)邊權(quán)排序,選出還沒有連接并且權(quán)最小的邊(3 6 4),屬于最小生成樹的頂點(diǎn)U=1,2,3,4,5,6此時(shí),最小生成樹已完成4、 實(shí)驗(yàn)程序的功能模塊功能模塊:bool cmp(Edge a,Edge b); /定義比較方法int getfa(int x);/在并查集森林中找到x的祖先int same(int x,int y); /判斷祖先是否是同一個(gè),即是否聯(lián)通void merge(int x,int y); /合并子樹,即聯(lián)通兩子樹sort(e+1,e+m+1,c
4、mp); /對邊按邊權(quán)進(jìn)行升序排序詳細(xì)代碼:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN_E 100000#define MAXN_V 100000using namespace std;struct Edge int fm,to,dist; /邊的起始頂點(diǎn),邊的到達(dá)頂點(diǎn),邊權(quán)eMAXN_E;int faMAXN_V,n,m; /頂點(diǎn)數(shù)組,頂點(diǎn)總數(shù),邊總數(shù)/定義比較,只是邊權(quán)比較bool cmp(Edge a,Edge
5、b) return a.dist < b.dist;/查找x的祖先int getfa(int x)/getfa是在并查集森林中找到x的祖先 if(fax=x) return fax; else return fax = getfa(fax);/判斷祖先是否是同一個(gè),即是否聯(lián)通int same(int x,int y) return getfa(x)=getfa(y);/合并兩棵樹void merge(int x,int y) int fax=getfa(x),fay=getfa(y); fafax=fay;int main()int i;cout<<"請輸入頂點(diǎn)數(shù)目
6、和邊數(shù)目:"<<endl; cin>>n>>m;/n為點(diǎn)數(shù),m為邊數(shù)/輸出頂點(diǎn)信息cout<<"各個(gè)頂點(diǎn)值依次為:"<<endl;for(i=0;i<n;i+)fai=i;if(i!=0)cout<<fai<<" "cout<<endl;cout<<"請輸入邊的信息(例子:1 4 5 從頂點(diǎn)1到頂點(diǎn)4的邊權(quán)為5)"<<endl; for(i=1;i<=m;i+)cin>>ei.fm&
7、gt;>ei.to>>ei.dist;/用邊集數(shù)組存放邊,方便排序和調(diào)用sort(e+1,e+m+1,cmp); /對邊按邊權(quán)進(jìn)行升序排序 int rst=n,ans=0;/rst表示目前的點(diǎn)共存在于多少個(gè)集合中,初始情況是每個(gè)點(diǎn)都在不同的集合中 for(i=1;i<=m && rst>1;i+) int x=ei.fm,y=ei.to; if(same(x,y) continue;/same函數(shù)是查詢兩個(gè)點(diǎn)是否在同一集合中 else merge(x,y);/merge函數(shù)用來將兩個(gè)點(diǎn)合并到同一集合中 rst-;/每次將兩個(gè)不同集合中的點(diǎn)合并,都將
8、使rst值減1 ans+=ei.dist;/這條邊是最小生成樹中的邊,將答案加上邊權(quán) cout<<ans; return 0;5、 測試數(shù)據(jù)和相應(yīng)的最小生成樹Input:6 101 2 61 3 11 4 52 3 52 5 63 4 53 5 63 6 44 6 25 6 6Putout:18生成樹為:七、思考題1、微軟面試題一個(gè)大院子里住了50戶人家,每家都養(yǎng)了一條狗,有一天他們接到通知說院子里有狗生病了,并要求所有主人在發(fā)現(xiàn)自己家狗生病的當(dāng)天就要把狗槍殺掉。然而所有主人和他們的狗都不能夠離開自己的房子,主人與主人之間也不能通過任何方式進(jìn)行溝通,他們能做的只是通過窗戶觀察別人家
9、的狗是否生病從而判斷自己的狗病否。(就是說,每個(gè)主人只能看出其他 49家的狗是不是生病,單獨(dú)看自己的狗是看不出來的)第一天沒有槍聲,第二天還是沒有槍聲,第三天傳出一陣槍聲,問有多少條狗被槍殺。答:3只 假如只有一只病狗,那么當(dāng)該病狗主人第一天發(fā)現(xiàn)其他49家都是好狗時(shí)就會判斷出自己家狗是病狗,那么第一天就會有槍聲。假如有兩只病狗A和B,那么當(dāng)兩只狗主人對望時(shí),看到了對方家里是病狗,那么他們也不會判斷出自己家狗狗是否生病,當(dāng)然第一天第二天第三天以及以后都不會有槍聲。假如有三只病狗A和B和C,那么其他47個(gè)主人都會看到3只病狗,而他們?nèi)覅s互相看到兩只病狗,第一天沒有槍聲是因?yàn)锳BC三家都看到了其他的病狗,沒有判斷初自己家狗是否
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年海南省建筑安全員B證考試題庫
- 2025年安徽建筑安全員-C證考試題庫
- 2025黑龍江省建筑安全員-A證考試題庫及答案
- 《急腹癥診治原則》課件
- 酸堿鹽復(fù)習(xí)課件浙教版
- 《手機(jī)視頻轉(zhuǎn)換》課件
- 單位管理制度展示大全【人員管理】十篇
- 車鉤緩沖器拆裝器行業(yè)深度研究報(bào)告
- 單位管理制度展示匯編【職工管理篇】十篇
- 單位管理制度收錄大全【人力資源管理篇】
- 監(jiān)理人員安全生產(chǎn)培訓(xùn)
- 2024-2030年中國電力檢修行業(yè)運(yùn)行狀況及投資前景趨勢分析報(bào)告
- 河北省百師聯(lián)盟2023-2024學(xué)年高二上學(xué)期期末大聯(lián)考?xì)v史試題(解析版)
- 中央空調(diào)系統(tǒng)運(yùn)行與管理考核試卷
- 核電工程排水隧道專項(xiàng)施工方案
- 2021年四川省涼山州九年級中考適應(yīng)性考試?yán)砜凭C合(試卷)
- 骨科疼痛的評估及護(hù)理
- 民辦學(xué)校招生教師培訓(xùn)
- 【MOOC】概率論與數(shù)理統(tǒng)計(jì)-南京郵電大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年度軟件開發(fā)分包合同技術(shù)要求與交底2篇
- 居家養(yǎng)老人員培訓(xùn)管理制度
評論
0/150
提交評論