![關(guān)鍵路徑問題_第1頁](http://file4.renrendoc.com/view3/M01/0B/01/wKhkFmaAqmOAF_U5AACrUQx1wTI393.jpg)
![關(guān)鍵路徑問題_第2頁](http://file4.renrendoc.com/view3/M01/0B/01/wKhkFmaAqmOAF_U5AACrUQx1wTI3932.jpg)
![關(guān)鍵路徑問題_第3頁](http://file4.renrendoc.com/view3/M01/0B/01/wKhkFmaAqmOAF_U5AACrUQx1wTI3933.jpg)
![關(guān)鍵路徑問題_第4頁](http://file4.renrendoc.com/view3/M01/0B/01/wKhkFmaAqmOAF_U5AACrUQx1wTI3934.jpg)
![關(guān)鍵路徑問題_第5頁](http://file4.renrendoc.com/view3/M01/0B/01/wKhkFmaAqmOAF_U5AACrUQx1wTI3935.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計題目關(guān)鍵路徑問題院系計算機系年級班級2016計科(嵌入)學(xué)生姓名陳銀學(xué)號20162375004學(xué)期2017-2018(二)任課教師黃群1引言2需求分析2.1問題描述2.2基本要求2.3目的3概要設(shè)計3.1數(shù)據(jù)類型3.2程序流程圖4詳細設(shè)計4.1創(chuàng)建圖的函數(shù)4.2求關(guān)鍵路徑5關(guān)鍵路徑測試6課程設(shè)計總結(jié)與體會7參考文獻1引言當(dāng)一項工程分為多個子工程時,需要確定這么子過程的次序問題,還需要計算整個工程的時間,確定哪些活動是影響工程進度的關(guān)鍵,為按時或者提前完成整個工程提供保證,這就是關(guān)鍵路徑的問題。關(guān)鍵路徑問題相應(yīng)的網(wǎng)稱為AOE網(wǎng),其中:頂點表示事件,邊表示活動,邊得權(quán)表示活動持續(xù)時間,AOE網(wǎng)可以用來估算工程完成的時間。2需求分析2.1問題描述(1)選擇建圖方法有:涉及鄰接矩陣,鄰接表,十字鏈表,鄰接多重等多種方法,要選擇一種適當(dāng)?shù)姆椒ńD,提高算法效率,降低時間復(fù)雜度和空間復(fù)雜度。(2)兩個相鄰頂點與它們之間的邊表示活動,邊上的數(shù)據(jù)表示活動延續(xù)的時間。對于給出的事件AOE網(wǎng)絡(luò)。要求求出從起點到終點的所有路徑,經(jīng)分析,比較后找出長讀最大的路徑,從而得出關(guān)鍵路徑的算法,并給出計算機上機實現(xiàn)的源程序。完成不同路徑的活動所需時間不同,但路徑各條上所有活動都完成,這個工程才算完成。2.2基本要求1選擇一種算法建立圖:選擇鄰接表算法,是一種順序+鏈?zhǔn)酱鎯Y(jié)構(gòu)。用順序表存放頂點,為每個頂點建立一個單鏈表,單鏈表中的結(jié)點表示該頂點的邊或以該頂點為尾的弧。2兩個相鄰頂點與它們之間邊表示活動,邊上的數(shù)字表示活動時間,求出從起點到終點的所有路徑,然后通過拓撲排序和逆拓撲排序求出最早與最晚發(fā)生時間,找出長度最大的路徑,從而求得關(guān)鍵路徑。2.3目的通過輸入所要構(gòu)造的圖頂點數(shù),弧數(shù),創(chuàng)建圖,并打印出來,對圖進行拓撲排序,求得此圖最早發(fā)生時間和最遲發(fā)生時間,并求得關(guān)鍵活動和關(guān)鍵路徑。3概要設(shè)計求關(guān)鍵路徑必須在拓撲排序的前提下,有環(huán)圖不能求關(guān)鍵路徑,只能減少關(guān)鍵活動工期,只有在不改變關(guān)鍵路徑的前提下,減少關(guān)鍵活動才能減少整個工期?;顒幼钤鐣r間ve(i);最晚時間vi(i)。3.1數(shù)據(jù)類型structGraphNode{intstart;//弧尾的頂點的下標(biāo)intend;//弧頭的頂點的下標(biāo),有箭頭的一方intweight;//弧的權(quán)重GraphNode*next;//下一條弧};//頭結(jié)點structPnode{GraphNode*firstarc;//第一條依附在該頂點的弧stringdata;};3.2程序流程圖開始開始主函數(shù):求關(guān)鍵主函數(shù):求關(guān)鍵文件輸入文件輸入求最大路徑,打印關(guān)鍵路徑結(jié)束求最大路徑,打印關(guān)鍵路徑結(jié)束4詳細設(shè)計4.1創(chuàng)建圖的函數(shù)classGraph_DG{private:intapex;//頂點個數(shù)intedge;//邊的條數(shù)Pnode*arc;//鄰接表int*indegree;//各個頂點的入度情況stack<int>List;//拓撲序列中各個邊的情況int*ve;//記錄每個頂點的最早發(fā)生時間int*vl;//記錄每個頂點最遲發(fā)生時間public:Graph_DG(intapex,intedge);~Graph_DG();//析構(gòu)函數(shù)boolcheck_edge_value(int,int,int);//檢查邊的信息是否合法voidcreateGraph();//創(chuàng)建一個新的圖voidprint();//打印圖的鄰接表booltopological_sort();boolCriticalPath();};4.2求關(guān)鍵路徑#include"關(guān)鍵路徑.h"Graph_DG::Graph_DG(intapex,intedge){/*初始化一些基本的信息,包括邊和頂點個數(shù),各個頂點入度數(shù)組,鄰接表的等*/this->apex=apex;this->edge=edge;this->arc=newPnode[this->apex];this->indegree=newint[this->apex];this->ve=newint[this->apex];this->vl=newint[this->apex];for(inti=0;i<this->apex;i++){this->indegree[i]=0;this->ve[i]=0;this->arc[i].firstarc=NULL;this->arc[i].data="v"+to_string(i+1);}}//釋放內(nèi)存空間Graph_DG::~Graph_DG(){GraphNode*p,*q;for(inti=0;i<this->apex;i++){if(this->arc[i].firstarc){p=this->arc[i].firstarc;while(p){q=p->next;deletep;p=q;}}}delete[]this->arc;delete[]this->indegree;}//判斷我們每次輸入的的邊的信息是否合法//頂點從1開始編號boolGraph_DG::check_edge_value(intstart,intend,intweight){if(start<1||end<1||start>apex||end>apex||weight<0){returnfalse;}returntrue;}voidGraph_DG::createGraph(){cout<<"請輸入每條邊的起點和終點的編號(頂點從1開始編號)以及每條邊的權(quán)重"<<endl;intcount=0;//記錄初始化邊的條數(shù)intstart,end,weight;while(count!=this->edge){cin>>start>>end>>weight;while(!check_edge_value(start,end,weight)){cout<<"輸入的信息不合法,請重新輸入:"<<endl;cin>>start>>end>>weight;}GraphNode*temp=newGraphNode;temp->start=start-1;temp->end=end-1;temp->weight=weight;temp->next=NULL;//如果當(dāng)前頂點的還沒有邊依附時,++indegree[temp->end];//對應(yīng)的弧頭的頂點的入度加1if(this->arc[start-1].firstarc==NULL){this->arc[start-1].firstarc=temp;}else{GraphNode*now=this->arc[start-1].firstarc;while(now->next){now=now->next;}//找到該鏈表的最后一個結(jié)點now->next=temp;}++count;}}voidGraph_DG::print(){cout<<"圖的鄰接表為:"<<endl;intcount=0;while(count!=this->apex){cout<<this->arc[count].data<<"";GraphNode*temp=this->arc[count].firstarc;while(temp){cout<<"<"<<this->arc[temp->start].data<<","<<this->arc[temp->end].data<<">="<<temp->weight<<"";temp=temp->next;}cout<<"^"<<endl;++count;}}boolGraph_DG::topological_sort(){cout<<"圖的拓撲序列為:"<<endl;stack<int>s;//保存入度為0的頂點下標(biāo)GraphNode*temp;inti;for(i=0;i<this->apex;i++){if(!indegree[i])s.push(i);//入度為0,則入棧}//count用于計算輸出的頂點個數(shù)intcount=0;while(!s.empty()){//如果棧為空,退出循環(huán)i=s.top();//i等于棧頂?shù)脑豷.pop();cout<<this->arc[i].data<<"";//輸出拓撲序列temp=this->arc[i].firstarc;this->List.push(i);while(temp){if(!(--indegree[temp->end])){//如果入度減少到為0,則入棧s.push(temp->end);}//同時更新ve的值if((ve[i]+temp->weight)>ve[temp->end]){ve[temp->end]=ve[i]+temp->weight;}temp=temp->next;}++count;}if(count==this->apex){cout<<endl;returntrue;}cout<<"此圖有環(huán),無拓撲序列"<<endl;returnfalse;//說明這個圖有環(huán)}boolGraph_DG::CriticalPath(){if(!this->topological_sort()){cout<<"此圖有環(huán),無關(guān)鍵路徑"<<endl;returnfalse;}cout<<"圖的關(guān)鍵路徑為:"<<endl;//初始化vl的值都為ve[this->vexnum-1]intk;for(k=0;k<this->apex;k++){vl[k]=ve[this->apex-1];}GraphNode*temp;while(!this->List.empty()){k=List.top();//從逆拓撲排序開始,求vlList.pop();temp=this->arc[k].firstarc;while(temp){//dut<k,temp->end>,從以第k個頂點為弧尾集合中選擇一個最小的值//來作為第i個頂點的最遲發(fā)生時間if(vl[k]>(vl[temp->end]-temp->weight)){vl[k]=vl[temp->end]-temp->weight;}temp=temp->next;}}intee;intel;for(k=0;k<this->apex;k++){temp=temp=this->arc[k].firstarc;while(temp
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國限速器漲緊裝置數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國家具五金配件數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國噴霧干燥設(shè)備數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國單折墊數(shù)據(jù)監(jiān)測研究報告
- 2025年中國電動法蘭楔式閘閥市場調(diào)查研究報告
- 建筑抗震設(shè)計考核試卷
- 2025年文化產(chǎn)業(yè)項目投資居間服務(wù)二零二五年度合作協(xié)議3篇
- 2025-2030年商務(wù)休閑斜挎包系列企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年新型雕塑顏料行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年含乳飲料健康講座行業(yè)跨境出海戰(zhàn)略研究報告
- 中國主要蜜源植物蜜源花期和分布知識
- 電化學(xué)免疫傳感器的應(yīng)用
- 數(shù)據(jù)中心基礎(chǔ)知識培訓(xùn)-2024鮮版
- 供電企業(yè)輿情的預(yù)防及處置
- 【高中語文】《氓》課件++統(tǒng)編版+高中語文選擇性必修下冊
- T-WAPIA 052.3-2023 無線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點和控制器
- 第4課+中古時期的亞洲(教學(xué)設(shè)計)-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 金點子活動總結(jié)匯報
- 運動技能學(xué)習(xí)與控制完整
- 原料驗收標(biāo)準(zhǔn)知識培訓(xùn)課件
- Unit4MyfamilyStorytime(課件)人教新起點英語三年級下冊
評論
0/150
提交評論