![景區(qū)旅游信息管理系統(tǒng)[知識材料]_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-11/10/3f85532a-a1ef-4149-8d38-00cc3aeabb0b/3f85532a-a1ef-4149-8d38-00cc3aeabb0b1.gif)
![景區(qū)旅游信息管理系統(tǒng)[知識材料]_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-11/10/3f85532a-a1ef-4149-8d38-00cc3aeabb0b/3f85532a-a1ef-4149-8d38-00cc3aeabb0b2.gif)
![景區(qū)旅游信息管理系統(tǒng)[知識材料]_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-11/10/3f85532a-a1ef-4149-8d38-00cc3aeabb0b/3f85532a-a1ef-4149-8d38-00cc3aeabb0b3.gif)
![景區(qū)旅游信息管理系統(tǒng)[知識材料]_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-11/10/3f85532a-a1ef-4149-8d38-00cc3aeabb0b/3f85532a-a1ef-4149-8d38-00cc3aeabb0b4.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、校園旅游信息管理系統(tǒng)1.1項(xiàng)目需求分析在旅游景區(qū),經(jīng)常會遇到游客打聽從一個(gè)景點(diǎn)到另一個(gè)景點(diǎn)的最短路徑和最短距離,這類游客不喜歡按照導(dǎo)游圖的線路來游覽,而是挑選自己感興趣的景點(diǎn)游覽。為于幫助這類游客信息查詢,就需要計(jì)算出所有景點(diǎn)之間最短路徑和最短距離。算法采用迪杰斯特拉算法或弗洛伊德算法均可。建立一個(gè)景區(qū)旅游信息管理系統(tǒng),實(shí)現(xiàn)的主要功能包括制訂旅游景點(diǎn)導(dǎo)游線路策略和制訂景區(qū)道路鋪設(shè)策略。任務(wù)中景點(diǎn)分布是一個(gè)無向帶權(quán)連通圖,圖中邊的權(quán)值是景點(diǎn)之間的距離。1)景區(qū)旅游信息管理系統(tǒng)中制訂旅游景點(diǎn)導(dǎo)游線路策略,首先通過遍歷景點(diǎn),給出一個(gè)入口景點(diǎn),建立一個(gè)導(dǎo)游線路圖,導(dǎo)游線路圖用有向圖表示。遍歷采用深度優(yōu)
2、先策略,這也比較符合游客心理。(2)為了使導(dǎo)游線路圖能夠優(yōu)化,可通過拓樸排序判斷圖中有無回路,若有回路,則打印輸出回路中的景點(diǎn),供人工優(yōu)化。(3)在導(dǎo)游線路圖中,還為一些不愿按線路走的游客提供信息服務(wù),比如從一個(gè)景點(diǎn)到另一個(gè)景點(diǎn)的最短路徑和最短距離。在本線路圖中將輸出任意景點(diǎn)間的最短路徑和最短距離。(4)在景區(qū)建設(shè)中,道路建設(shè)是其中一個(gè)重要內(nèi)容。道路建設(shè)首先要保證能連通所有景點(diǎn),但又要花最小的代價(jià),可以通過求最小生成樹來解決這個(gè)問題。本任務(wù)中假設(shè)修建道路的代價(jià)只與它的里程相關(guān)。因此歸納起來,本任務(wù)有如下功能模塊:創(chuàng)建景區(qū)景點(diǎn)分布圖;輸出景區(qū)景點(diǎn)分布圖(鄰接矩陣)輸出導(dǎo)游線路圖;判斷導(dǎo)游線路圖有
3、無回路;求兩個(gè)景點(diǎn)間的最短路徑和最短距離;輸出道路修建規(guī)劃圖。主程序用菜單選項(xiàng)供用戶選擇功能模塊。1.2項(xiàng)目設(shè)計(jì)流程 1.2.1項(xiàng)目總體框架校園旅游信息管理系統(tǒng)創(chuàng)建景區(qū)景點(diǎn)分布圖輸出景區(qū)景點(diǎn)分布圖輸出景區(qū)導(dǎo)游線路圖導(dǎo)游線路圖有無回路兩個(gè)景點(diǎn)間的最短路徑輸出道路修建規(guī)劃圖1.2.2項(xiàng)目數(shù)據(jù)結(jié)構(gòu)#ifndef SUCCESS/標(biāo)志位成功#define SUCCESS1#endif#ifndef FAILURE/標(biāo)志位失敗#define FAILURE0#endif#ifndef INF /標(biāo)志位無窮#define INF 0x3f3fffff#endif#ifndef MAXNUM #define
4、 MAXNUM20#endiftypedef bool STATUS;/定義函數(shù)狀態(tài)數(shù)據(jù)類型typedef char VERTEXTYPEMAXNUM11;/定義頂點(diǎn)向量數(shù)據(jù)類型typedef int ADJMATRIXMAXNUMMAXNUM;/定義鄰接矩陣數(shù)據(jù)類型typedef struct GRAPH/定義圖數(shù)據(jù)類型VERTEXTYPE Vexs;/圖的頂點(diǎn)向量ADJMATRIX Arcs;/圖的鄰接矩陣int VexNum;/圖的當(dāng)前頂點(diǎn)int ArcNum;/圖的當(dāng)前弧*PGRAPH;/定義圖的指針數(shù)據(jù)類型typedef struct CLOSEDGE/定義輔助數(shù)組數(shù)據(jù)類型VERTE
5、XTYPE Vexs;/圖的頂點(diǎn)向量int LowcostMAXNUM;/*PCLOSEDGE;/定義輔助數(shù)組指針數(shù)據(jù)類型1.2.3項(xiàng)目模塊設(shè)計(jì)創(chuàng)建景區(qū)景點(diǎn)分布圖一. 鄰接矩陣 (Adjacency Matrix)(二維數(shù)組表示法)在圖的鄰接矩陣表示中,有一個(gè)記錄各個(gè)頂點(diǎn)信息的頂點(diǎn)表,還有一個(gè)表示各個(gè)頂點(diǎn)之間關(guān)系的鄰接矩陣。設(shè)圖 A = (V, E)是一個(gè)有 n 個(gè)頂點(diǎn)的圖, 圖的鄰接矩陣是一個(gè)二維數(shù)組 A.edgenn,定義(滿足如下條件的n階矩陣):無向圖數(shù)組表示法特點(diǎn):1)無向圖鄰接矩陣是對稱矩陣,同一條邊表示了兩次;2)頂點(diǎn)v的度:在無向圖中等于二維數(shù)組對應(yīng)行(或列)中1的個(gè)數(shù);在有向
6、圖中, 統(tǒng)計(jì)第 i 行 1 的個(gè)數(shù)可得頂點(diǎn) i 的出度,統(tǒng)計(jì)第 j 列 1 的個(gè)數(shù)可得頂點(diǎn) j 的入度。3)判斷兩頂點(diǎn)v、u是否為鄰接點(diǎn):只需判二維數(shù)組對應(yīng)分量是否為1;4)頂點(diǎn)不變,在圖中增加、刪除邊:只需對二維數(shù)組對應(yīng)分量賦值1或清0;5)設(shè)存儲頂點(diǎn)的一維數(shù)組大小為n(圖的頂點(diǎn)數(shù)n), G占用存儲空間:n+n2;G占用存儲空間只與它的頂點(diǎn)數(shù)有關(guān),與邊數(shù)無關(guān);適用于邊稠密的圖;流程圖:程序:/創(chuàng)建景區(qū)景點(diǎn)分布圖STATUS CreateGraph(PGRAPH pGraph)printf(ttt_n);printf(nttt$t創(chuàng)建景區(qū)景點(diǎn)分布圖t$n);printf(ttt_n);/初始化
7、圖的頂點(diǎn)數(shù)printf(ttt初始化頂點(diǎn)數(shù)和弧度數(shù).n);printf(ttt請輸入圖的頂點(diǎn)數(shù)(VexNum);/檢查if(pGraph-VexNum20)printf(ttt警告:輸入數(shù)據(jù)錯(cuò)誤!n);printf(ttt按任意鍵回主菜單!);getch();return FAILURE;/初始化圖的弧數(shù)printf(ttt請輸入圖的弧度數(shù)(ArcNum);/檢查if(pGraph-ArcNum20)printf(ttt警告:輸入數(shù)據(jù)錯(cuò)誤!n);printf(ttt按任意鍵回主菜單!);getch();return FAILURE;/初始化圖的頂點(diǎn)名稱printf(ttt-n);printf(
8、ttt初始化的頂點(diǎn)名稱.n);for(int i=0;iVexNum;i+)printf(ttt請輸入第%d個(gè)頂點(diǎn)名稱:,i+1);scanf(%s,pGraph-Vexsi);/初始化圖的弧權(quán)值為最大值for(i=0;iVexNum;i+)for(int j=0;jVexNum;j+)pGraph-Arcsij=INF;/輸入弧的信息printf(ttt-n);printf(ttt初始化的弧的信息.n);printf(ttt請輸入弧的信息(注:從0開始):n);for(i=0;iArcNum;i+)int Stav,Endv,Weight;printf(ttt請輸入第%d條弧(格式:Vi V
9、j Weight):,i+1);scanf(%d%d%d,&Stav,&Endv,&Weight);pGraph-ArcsEndvStav=Weight;pGraph-ArcsStavEndv=Weight;printf(ttt創(chuàng)建景區(qū)景點(diǎn)分布圖成功!n);printf(ttt按任意鍵回主菜單!);getch();return SUCCESS;輸出景區(qū)景點(diǎn)分布圖流程圖:程序:/輸出景區(qū)景點(diǎn)分布圖STATUS PrintGraph(const PGRAPH pGraph)printf(ttt_n);printf(nttt$t顯示景區(qū)景點(diǎn)分布圖t$n);printf(ttt_nn);/printf
10、(t景區(qū)景點(diǎn)名稱.nt);for(int i=0;iVexNum;i+)printf(%st,pGraph-Vexsi);printf(nnt景區(qū)景點(diǎn)信息.n);for(i=0;iVexNum;i+)printf(t_nt);for(int j=0;jVexNum;j+)if(pGraph-Arcsij=INF)printf(t);elseprintf(%dt,pGraph-Arcsij);printf(n);printf(t_nt);printf(按任意鍵回主菜單!);getch();return SUCCESS;輸出景區(qū)導(dǎo)游線路圖圖的遍歷從圖中某一頂點(diǎn)出發(fā)訪遍圖中所有的頂點(diǎn),且使每個(gè)頂點(diǎn)僅
11、被訪問一次,這一過程就叫做圖的遍歷 (Traversing Graph)。圖中可能存在回路,且圖的任一頂點(diǎn)都可能與其它頂點(diǎn)相通,在訪問完某個(gè)頂點(diǎn)之后可能會沿著某些邊又回到了曾經(jīng)訪問過的頂點(diǎn)。為了避免重復(fù)訪問,可設(shè)置一個(gè)標(biāo)志頂點(diǎn)是否被訪問過的輔助數(shù)組 visited 。輔助數(shù)組 visited 的初始狀態(tài)為 0, 在圖的遍歷過程中, 一旦某一個(gè)頂點(diǎn) i 被訪問, 就立即讓 visited i 為 1, 防止它被多次訪問。兩種圖的遍歷方法:深度優(yōu)先搜索 DFS (Depth First Search)廣度優(yōu)先搜索 BFS (Breadth First Search)廣度優(yōu)先搜索遍歷圖(BFS)對連
12、通圖,從起始點(diǎn)V到其余各頂點(diǎn)必定存在路徑。 其中,V-w1, V-w2, V-w8 的路徑長度為1; V-w7, V-w3, V-w5 的路徑長度為2; V-w6, V-w4 的路徑長度為3從圖中的某個(gè)頂點(diǎn)V0出發(fā),并在訪問此頂點(diǎn)之后依次訪問V0的所有未被訪問過的鄰接點(diǎn),之后按這些頂點(diǎn)被訪問的先后次序依次訪問它們的鄰接點(diǎn),直至圖中所有和V0有路徑相通的頂點(diǎn)都被訪問到。 若此時(shí)圖中尚有頂點(diǎn)未被訪問,則另選圖中一個(gè)未曾被訪問的頂點(diǎn)作起始點(diǎn),重復(fù)上述過程,直至圖中所有頂點(diǎn)都被訪問到為止。流程圖:程序: /輸出景區(qū)導(dǎo)游線路圖(注:廣度優(yōu)先遍歷)STATUS TraverseGraph(const PG
13、RAPH pGraph)printf(ttt_n);printf(nttt$t輸出景區(qū)導(dǎo)游線路圖t$n);printf(ttt_nn);/定義訪問標(biāo)志數(shù)組bool* Visit=(bool*)malloc(pGraph-VexNum*sizeof(bool);/初始化訪問標(biāo)志數(shù)組為falsefor(int i=0;iVexNum;i+)Visiti=false;/定義隊(duì)列、并初始化隊(duì)列QUEUE Queue;if(InitQueue(&Queue,pGraph-VexNum)=FAILURE)printf(ttt警告:創(chuàng)建隊(duì)列失?。);printf(ttt按任意鍵回主菜單!);getch()
14、;return FAILURE;/定義訪問頂點(diǎn)變量,并初始值為0int Vertex=0;doif(!VisitVertex)printf(ttt%s景點(diǎn).n,pGraph-VexsVertex);/標(biāo)志訪問過VisitVertex=true;/遍歷與Vertex相連的頂點(diǎn)并進(jìn)隊(duì)for(i=0;iVexNum;i+)if(Visiti=false&pGraph-ArcsVertexi!=INF)EnQueue(&Queue,i);/出隊(duì)DeQueue(&Queue,&Vertex);while(QueueLen(&Queue);/銷毀隊(duì)列DestroyQueue(&Queue);printf(
15、ttt按任意鍵回主菜單!);getch();return SUCCESS;有向圖的拓?fù)渑判蚝沃^“拓?fù)渑判颉保?對有向圖進(jìn)行如下操作:假設(shè)G=(V,E)是一個(gè)具有n個(gè)頂點(diǎn)的有向圖,V中頂點(diǎn)序列vl,v2,vn稱做一個(gè)拓?fù)湫蛄?Topological Order),當(dāng)且僅當(dāng)該頂點(diǎn)序列滿足下列條件:若在有向圖G中存在從頂點(diǎn)vi到vj的一條路徑,則在頂點(diǎn)序列中頂點(diǎn)vi必須排在頂點(diǎn)vj之前。通常,在AOV網(wǎng)中,將所有活動排列成一個(gè)拓?fù)湫蛄械倪^程叫做拓?fù)渑判?Topological Sort)。在AOV網(wǎng)中不應(yīng)該出現(xiàn)有向環(huán)。因?yàn)榄h(huán)的存在意味著某項(xiàng)活動將以自己為先決條件,顯然無法形成拓?fù)湫蛄?。判定網(wǎng)中是否存
16、在環(huán)的方法:對有向圖構(gòu)造其頂點(diǎn)的拓?fù)溆行蛐蛄?,若網(wǎng)中所有頂點(diǎn)都出現(xiàn)在它的拓?fù)溆行蛐蛄兄?,則該AOV網(wǎng)中一定不存在環(huán)。例如:對于有向圖 可求得拓?fù)溆行蛐蛄校?A B C D 或 A C B DBcDA例如, 對學(xué)生選課工程圖進(jìn)行拓?fù)渑判? 得到的拓?fù)溆行蛐蛄袨?C1 , C2 , C3 , C4 , C5 , C6 , C8 , C9 , C7或 C1 , C8 , C9 , C2 , C5 , C3 , C4 , C7 , C6 反之,對于下列有向圖 不能求得它的拓?fù)溆行蛐蛄小?因?yàn)閳D中存在一個(gè)回路 B, C, D 如何進(jìn)行 ?輸入AOV網(wǎng)絡(luò)。令 n 為頂點(diǎn)個(gè)數(shù)。 (1)在AOV網(wǎng)絡(luò)中選一個(gè)沒
17、有直接前驅(qū)的頂點(diǎn),并輸出之; (2)從圖中刪去該頂點(diǎn), 同時(shí)刪去所有它發(fā)出的有向邊;重復(fù)以上步驟,直到全部頂點(diǎn)均已輸出,拓?fù)溆行蛐蛄行纬?,拓?fù)渑判蛲瓿?;或圖中還有未輸出的頂點(diǎn),但已跳出處理循環(huán)。這說明圖中還剩下一些頂點(diǎn),它們都有直接前驅(qū),再也找不到?jīng)]有前驅(qū)的頂點(diǎn)了。這時(shí)AOV網(wǎng)絡(luò)中必定存在有向環(huán)。在實(shí)現(xiàn)拓?fù)渑判虻乃惴ㄖ校捎绵徑颖碜鳛橛邢驁D的存儲結(jié)構(gòu),每個(gè)頂點(diǎn)設(shè)置一個(gè)單鏈表,每個(gè)單鏈表有一個(gè)表頭結(jié)點(diǎn),在表頭結(jié)點(diǎn)中增加一個(gè)存放頂點(diǎn)入度的域count,這些表頭結(jié)點(diǎn)構(gòu)成一個(gè)數(shù)組。為了避免重復(fù)檢測入度為0的點(diǎn),另設(shè)一棧存放所有入度為0的點(diǎn)。對于有n個(gè)頂點(diǎn)和e條邊的有向圖而言,for循環(huán)中建立入度為0的
18、頂點(diǎn)棧時(shí)間為O(n);若在拓?fù)渑判蜻^程中不出現(xiàn)有向環(huán),則每個(gè)頂點(diǎn)出棧、入棧和入度減1的操作在while循環(huán)語句中均執(zhí)行e次,因此拓?fù)渑判蚩偟臅r(shí)間花費(fèi)為O (n+e)。流程圖:程序:/有向圖的拓?fù)渑判騍TATUS TopologicalSort(const PGRAPH pGraph)printf(ttt_n);printf(nttt$t導(dǎo)游線路圖有無回路t$n);printf(ttt_nn);/定義入度數(shù)組,記錄每個(gè)頂點(diǎn)的入度,初始化為0int IndegreeMAXNUM=0;/定義桟、并初始化桟STACK Stack;if(InitStack(&Stack,pGraph-VexNum)=F
19、AILURE)printf(ttt警告:創(chuàng)建桟失敗!n);printf(ttt按任意鍵回主菜單!);getch();return FAILURE;printf(ttt計(jì)算各頂點(diǎn)的入度.n);for(int j=0;jVexNum;j+)/求各個(gè)頂點(diǎn)的入度for(int i=0;iVexNum;i+)if(pGraph-Arcsij!=INF)Indegreej+;/入度為0的頂點(diǎn)入棧 if(!Indegreej)PushStack(&Stack,j);printf(ttt進(jìn)行拓?fù)渑判?n);/Count用來指示入度為0的頂點(diǎn)個(gè)數(shù)int Count=0,k;while(StackLen(&Sta
20、ck)/出桟、并訪問PopStack(&Stack,&k);printf(%st,pGraph-Vexsk);Count+;/對出棧的頂點(diǎn)所指向的頂點(diǎn)減一 ,并且將入度為0的頂點(diǎn)入棧for(int i=0;iVexNum;i+)if(pGraph-Arcski!=INF)if(!(-Indegreei)PushStack(&Stack,i);/銷毀桟DestroyStack(&Stack);/判斷是否是拓?fù)渑判騣f(CountVexNum)printf(ttt結(jié)果:導(dǎo)游線路圖有回路n);elseprintf(ttt結(jié)果:導(dǎo)游線路圖無回路n);printf(ttt按任意鍵回主菜單!);getch
21、();return SUCCESS;求兩個(gè)景點(diǎn)間的最短路徑最短路徑定義所謂最短路徑問題是指:如果從圖中某一頂點(diǎn)(源點(diǎn))到達(dá)另一頂點(diǎn)(終點(diǎn))的路徑可能不止一條,如何找到一條路徑似的沿此路徑上各邊的權(quán)值總和(稱為路徑長度)達(dá)到最小。迪杰斯特拉(Dijkstra)算法求單源最短路徑由Dijkstra提出的一種按路徑長度遞增序產(chǎn)生各頂點(diǎn)最短路徑的算法。(1)按路徑長度遞增序產(chǎn)生各頂點(diǎn)最短路徑若按長度遞增的次序生成從源點(diǎn)s到其它頂點(diǎn)的最短路徑,則當(dāng)前正在生成的最短路徑上除終點(diǎn)以外,其余頂點(diǎn)的最短路徑均已生成(將源點(diǎn)的最短路徑看作是已生成的源點(diǎn)到其自身的長度為0的路徑)。(2)具體做法一開始第一組只包括頂
22、點(diǎn) v 1 ,第二組包括其他所有頂點(diǎn), v 1 對應(yīng)的距離值為 0 ,第二組的頂點(diǎn)對應(yīng)的距離值是這樣確定的:若圖中有邊 , 則 v j 的距離為此邊所帶的權(quán)值,否則 v j 的距離值為一個(gè)很大的數(shù) ( 大于所有頂點(diǎn)間的路徑長度 ) ,然后每次從第二組的頂點(diǎn)中選一個(gè)其距離值為最小的 v m 加入到第一組中。每往第一組加入一個(gè)頂點(diǎn) v m ,就要對第二組的各個(gè)頂點(diǎn)的距離值進(jìn)行一次修正。若加進(jìn) v m 做中間頂點(diǎn),使從 v 1 到 v j 的最短路徑比不加 v m 的路徑為短,則要修改 v j 的距離值。修改后再選距離最小的頂點(diǎn)加入到第一組中。如此進(jìn)行下去,直到圖中所有頂點(diǎn)都包括在第一組中,或再也沒
23、有可加入到第一組中的頂點(diǎn)存在為止。假設(shè)有向圖 G 的 n 個(gè)頂點(diǎn)為 1 到 n, 并用鄰接矩陣 cost 表示 , 若 是圖 G 中的邊,則 costij 的值等于邊所帶的權(quán) ; 若 不是圖 G 中的邊,則 costij 等于一個(gè)很大的數(shù);若 i=j, 則 costij=0 。另外 , 設(shè)置三個(gè)數(shù)組 Sn 、 distn 、 pren 。 S 用以標(biāo)記那些已經(jīng)找到最短路徑的頂點(diǎn),若 Si-1=1, 則表示已經(jīng)找到源點(diǎn)到頂點(diǎn) i 的最短路徑 , 若 Si-1=0, 則表示從源點(diǎn)到頂點(diǎn) i 的最短路徑尚未求得。 disti-1 用來記錄源點(diǎn)到頂點(diǎn) i 的最短路徑。 prei-1 表示從源點(diǎn)到頂點(diǎn)
24、i 的最短路徑上該點(diǎn)的前趨頂點(diǎn),若從源點(diǎn)到該頂點(diǎn)無路徑,則用 0 作為其前一個(gè)頂點(diǎn)序號。流程圖:程序:/求兩個(gè)景點(diǎn)間的最短路徑STATUS MinShortPath(const PGRAPH pGraph)printf(ttt_n);printf(nttt$t景點(diǎn)之間的最短路徑t$n);printf(ttt_nn);/定義路徑矩陣、距離矩陣ADJMATRIX PathMatrix,DisMatrix;/定義輔助變量int i,j,k;/初始化路徑矩陣、距離矩陣for(i=0;iVexNum;i+)for(j=0;jVexNum;j+)DisMatrixij=pGraph-Arcsij;Path
25、Matrixij=-1;/求PathMatrix矩陣for(k=0;kVexNum;k+)for(i=0;iVexNum;i+)for(j=0;jVexNum;j+)if(DisMatrixijDisMatrixik+DisMatrixkj)DisMatrixij=DisMatrixik+DisMatrixkj;PathMatrixij=k;/定義起點(diǎn)、終點(diǎn)int Stav=-1,Endv=-1;/定義起點(diǎn)、終點(diǎn)名稱char StaNamMAXNUM,EndNamMAXNUM;printf(ttt輸入起始點(diǎn)和終點(diǎn)名稱(格式:Sta End):);scanf(%s%s,StaNam,EndNam
26、);for(i=0;iVexNum;i+)if(!strcmp(pGraph-Vexsi,StaNam)/起始點(diǎn)名稱下標(biāo)Stav=i;if(!strcmp(pGraph-Vexsi,EndNam)/終點(diǎn)名稱下標(biāo)Endv=i;/判斷起始點(diǎn)名稱和終點(diǎn)名稱是否存在if(Stav=-1|Endv=-1)return FAILURE;/定義桟、并初始化STACK Stack;if(InitStack(&Stack,pGraph-VexNum)=FAILURE)printf(ttt警告:創(chuàng)建桟失??!n);printf(ttt按任意鍵回主菜單!);getch();/將所有路徑入桟while(Endv!=-1
27、)PushStack(&Stack,Endv);Endv=PathMatrixStavEndv;/將所有路徑出桟、并輸出printf(ttt);while(1)printf(%s-,pGraph-VexsStav);if(!StackLen(&Stack)break;PopStack(&Stack,&Stav);printf(終點(diǎn));/銷毀桟DestroyStack(&Stack);printf(nttt按任意鍵回主菜單!);getch();return SUCCESS;輸出道路修建規(guī)劃圖prim算法在無向加權(quán)圖中,n個(gè)頂點(diǎn)的最小生成樹有n-1條邊,這些邊使得n個(gè)頂點(diǎn)之間可達(dá),且總的代價(jià)最小。
28、prim算法是一種貪心算法,將全部的頂點(diǎn)劃分為2個(gè)集合,每次總在2個(gè)集合之間中找最小的一條邊,局部最優(yōu)最終達(dá)到全局最優(yōu),這正是貪心的思想。具體的描述參見相關(guān)書籍:描述從單一頂點(diǎn)開始,普里姆算法按照以下步驟逐步擴(kuò)大樹中所含頂點(diǎn)的數(shù)目,直到遍及連通圖的所有頂點(diǎn)。1.輸入:一個(gè)加權(quán)連通圖,其中頂點(diǎn)集合為V,邊集合為E; 2.初始化:Vnew = x,其中x為集合V中的任一節(jié)點(diǎn)(起始點(diǎn)),Enew = ; 3.重復(fù)下列操作,直到Vnew = V: 1.在集合E中選取權(quán)值最小的邊(u, v),其中u為集合Vnew中的元素,而v則不是(如果存在有多條滿足前述條件即具有相同權(quán)值的邊,則可任意選取其中之一);
29、 2.將v加入集合Vnew中,將(u, v)加入集合Enew中; 4.輸出:使用集合Vnew和Enew來描述所得到的最小生成樹。例如: 流程圖:程序:/輸出道路修建規(guī)劃圖(注:最小生成樹)STATUS MininumCST(const PGRAPH pGraph)printf(ttt_n);printf(nttt$t輸出道路修建規(guī)劃圖t$n);printf(ttt_nn);/定義輔助數(shù)組變量CLOSEDGE Closedge;int Min=0;/初始化輔助數(shù)組,從第一個(gè)頂點(diǎn)開始for(int i=1;iVexNum;i+)Closedge.Lowcosti=pGraph-ArcsMini;s
30、trcpy(Closedge.Vexsi,pGraph-VexsMin);Closedge.LowcostMin=0;/選這其余的pGraph-VexNum-1個(gè)點(diǎn)for(i=1;iVexNum;i+)/保存輔助數(shù)組中Closedge.Lowcost權(quán)值最小值/查找第一個(gè)權(quán)值不是0的位置for(int j=0;jVexNum;j+)if(Closedge.Lowcostj!=0)break;Min=j;/查找輔助數(shù)組中最小值for(j=0;jVexNum;j+)if(Closedge.Lowcostj&Closedge.Lowcostj%sn,Closedge.VexsMin,pGraph-V
31、exsMin);/Closedge.LowcostMin=0;/選擇最小邊f(xié)or(j=0;jVexNum;j+)if(pGraph-ArcsMinjArcsMinj;strcpy(Closedge.Vexsj,pGraph-VexsMin);printf(nttt按任意鍵回主菜單!);getch();return SUCCESS;1.3項(xiàng)目編碼實(shí)現(xiàn)#include #include #include Graph.hint Frame()printf(ttt_n);printf(nttt$t景區(qū)旅游信息管理系統(tǒng)t$n);printf(ttt_nn);printf(ttt1.創(chuàng)建景區(qū)景點(diǎn)分布圖nn);printf(ttt2.保存景區(qū)景點(diǎn)分布圖nn);printf(ttt3.讀取景區(qū)景點(diǎn)分布圖nn);printf(ttt4.輸出景區(qū)景點(diǎn)分布圖nn);printf(ttt5.輸出景區(qū)導(dǎo)游線路圖nn);printf(ttt6.導(dǎo)游線路圖有無回路nn);printf(ttt7.景點(diǎn)之間的最短路徑nn);printf(ttt8.輸出道路修建規(guī)劃圖nn);printf(ttt9.退出信息管理系統(tǒng)nn);printf(ttt請選擇相應(yīng)功能:);return 0;int Menu
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股票交易成功的秘訣:課件教你精準(zhǔn)把握買賣時(shí)機(jī)下載量破萬
- 高速公路路面施工案例分析:典型課件講解
- 2025年拉薩從業(yè)資格證模擬考試-貨運(yùn)從業(yè)資格證考試
- 武昌首義學(xué)院《基礎(chǔ)日語上》2023-2024學(xué)年第一學(xué)期期末試卷
- 南京體育學(xué)院《材料加工基礎(chǔ)熱處理原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西省上黨聯(lián)盟2024-2025學(xué)年高三下學(xué)期期末質(zhì)量檢查英語試題理試題含解析
- 石家莊人民醫(yī)學(xué)高等??茖W(xué)?!稒C(jī)場信息系統(tǒng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 唐山學(xué)院《建設(shè)工程計(jì)量》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海市浦東新區(qū)第一教育署市級名校2025屆初三六校第二次聯(lián)考生物試題試卷含解析
- 金華市浦江縣2024-2025學(xué)年數(shù)學(xué)五下期末調(diào)研模擬試題含答案
- 養(yǎng)老院查房巡視管理制度
- 按摩店技師免責(zé)協(xié)議書
- 聲音與情緒管理
- 直播中控轉(zhuǎn)正述職報(bào)告
- 史寧中:義務(wù)教育數(shù)學(xué)課標(biāo)(2022年版)解讀
- 中華人民共和國統(tǒng)計(jì)法
- 機(jī)電設(shè)備安裝與調(diào)試技術(shù)課件
- 高三小說復(fù)習(xí)之?dāng)⑹录记墒」_課獲獎(jiǎng)?wù)n件市賽課比賽一等獎(jiǎng)?wù)n件
- 基于Simulink+DSP代碼生成的永磁電機(jī)控制 課件 第1-4章 DSP各模塊介紹-永磁同步電機(jī)的磁場定向控制技術(shù)
- 中國石油吉林職業(yè)技能鑒定中心鑒定經(jīng)管員操作試題
- 軍事AI模型優(yōu)化
評論
0/150
提交評論