版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 本次課程設(shè)計主要核心為利用迪杰斯特拉算法實現(xiàn)無向圖的最短路徑的計算和求解。要求理解迪杰斯特拉算法的具體實現(xiàn)流程、學(xué)會正確使用該算法求解實際問題。本次課程設(shè)計具體內(nèi)容是:為自己學(xué)校建立一個校園導(dǎo)航系統(tǒng)。該系統(tǒng)應(yīng)該具有:查詢?nèi)我鈨牲c最短路徑以及查詢?nèi)我庖稽c到其他各點的最短路徑。</p><p> 本程序要求
2、結(jié)合最短路徑迪杰斯特拉算法以及相應(yīng)的數(shù)據(jù)結(jié)構(gòu)的定義和使用,實現(xiàn)一個最短路徑算法的簡單應(yīng)用。本文主要包括的函數(shù)模塊有:數(shù)據(jù)結(jié)構(gòu)定義、無向圖的建立、導(dǎo)航圖建立、最短路徑求解及主函數(shù)模塊。還有運行調(diào)試過程的截圖,最后附上程序清單,以供查閱。</p><p> 本課程設(shè)計是對書本知識的簡單應(yīng)用,以此培養(yǎng)大家用書本知識解決實際問題的能力;培養(yǎng)實際工作所需要的動手能力;培養(yǎng)以科學(xué)理論和工程上能力的技術(shù),規(guī)范地開發(fā)大型、復(fù)雜
3、、高質(zhì)量的應(yīng)用軟件和系統(tǒng)軟件。</p><p> 關(guān)鍵字:校園導(dǎo)航,迪杰斯特拉算法,最短路徑,算法設(shè)計,數(shù)據(jù)結(jié)構(gòu)</p><p><b> 目 錄</b></p><p><b> 摘要I</b></p><p><b> 1問題描述1</b></p>
4、;<p><b> 2方案設(shè)計2</b></p><p> 2.1 數(shù)據(jù)結(jié)構(gòu)定義模塊2</p><p> 2.2 功能模塊定義2</p><p> 2.2.1 無向圖構(gòu)造模塊2</p><p> 2.2.2 導(dǎo)航圖建立模塊2</p><p> 2.2.
5、3 求最短路徑模塊3</p><p> 2.2.4 主菜單3</p><p><b> 3 流程圖4</b></p><p> 3.1 系統(tǒng)運行流程圖4</p><p> 3.2 迪杰斯特拉算法流程圖5</p><p> 4 功能模塊代碼實現(xiàn)6</p>
6、<p> 4.1 創(chuàng)建無向圖函數(shù)6</p><p> 4.2導(dǎo)航菜單生成7</p><p> 4.3最短路徑求解函數(shù)8</p><p> 5 運行調(diào)試11</p><p> 5.1查詢系統(tǒng)導(dǎo)航界面11</p><p> 5.2兩點最短距離導(dǎo)航11</p>
7、<p> 5.3某點到其他所有點最短距離12</p><p> 5.4退出系統(tǒng)12</p><p> 6程序設(shè)計總結(jié)13</p><p> 7 參考文獻14</p><p> 附錄 程序清單15</p><p><b> 問題描述</b></p>
8、;<p> 這是一個最短路徑算法的簡單應(yīng)用,體現(xiàn)了理論與實際的結(jié)合。在完成本系統(tǒng)過程中,應(yīng)用所學(xué)知識解決具體的實際問題。</p><p> 根據(jù)本設(shè)計要求,首先應(yīng)該根據(jù)本學(xué)校的具體實際,建立校園平面圖。然后根據(jù)該圖建立無向圖的鄰接矩陣,矩陣的值表示兩點之間的實際距離。最后根據(jù)用戶請求調(diào)用迪杰斯特拉算法,并輸出相應(yīng)的路徑信息。</p><p> 該系統(tǒng)還應(yīng)該設(shè)計可視化導(dǎo)航
9、鍵面,方便用戶使用。根據(jù)本課程設(shè)計要求,本系統(tǒng)應(yīng)該具備如下功能:</p><p> 1、查詢?nèi)我鈨牲c間的最短路徑(包括途經(jīng)地點以及最短距離);</p><p> 2、查詢?nèi)我庖稽c到其他各點的最短路徑(包括途經(jīng)地點以及最短距離);</p><p> 3、能完成連續(xù)的查詢工作;</p><p> 4、用戶查詢完后能方便的退出程序系統(tǒng)。&l
10、t;/p><p><b> 方案設(shè)計</b></p><p> 2.1 數(shù)據(jù)結(jié)構(gòu)定義模塊</p><p> 本模塊定義了導(dǎo)航圖中各個節(jié)點的基本結(jié)構(gòu)類型,主要采用鄰接矩陣的存儲結(jié)構(gòu)[1]來真實反映各節(jié)點到其他所有節(jié)點的路徑長度(權(quán)值大小)。</p><p><b> 其數(shù)據(jù)結(jié)構(gòu)定義為:</b>&
11、lt;/p><p> typedef struct</p><p><b> {</b></p><p> char* vexs[MAX_V]; //頂點向量</p><p> int arcs[MAX_V][MAX_V];//鄰接矩陣</p><p> int vexnum,a
12、rcnum;//圖的當(dāng)前頂點數(shù)和弧數(shù)</p><p><b> }MGraph;</b></p><p> 2.2 功能模塊定義</p><p> 2.2.1 無向圖構(gòu)造模塊</p><p> 根據(jù)實際情況設(shè)計學(xué)校平面圖(至少包含10個地點),并采用鄰接矩陣實現(xiàn)對該平面圖節(jié)點及權(quán)值信息的存儲[3]。包括:各定
13、點的名稱(地點名),各個節(jié)點到其他所有節(jié)點的真實路徑長度(賦權(quán)值)[4]。即對無向圖兩點間的邊值賦值。</p><p> 本課程設(shè)計中涉及地點編號及信息如下:</p><p> (1) 南門 (2) 行政樓 (3) 學(xué)生會堂 </p><p> (4) C 區(qū) (5) 靜
14、明湖 (6) 圖書館 </p><p> (7) 分析測試中心 (8) 第二教學(xué)樓 (9) 羽毛球場 </p><p> (10) 勵志樓 (11) 學(xué)生公寓中心 (12) 食堂區(qū) </p><p> (13) 醫(yī)務(wù)室 (
15、14) 凌云樓 (15) 籃球場 </p><p> (16) 生化樓 (17) 東門 (18) 文德樓 </p><p> (19) 排球場 (20) 第一教學(xué)樓 (21) 學(xué)生活動中心 </p><p> (22) 足球場
16、 (23) 北門 (24) 西苑 </p><p> (25) 學(xué)生洗滌中心 (26) 開水房 (27) 自助服務(wù)點</p><p> 2.2.2 導(dǎo)航圖建立模塊</p><p> 根據(jù)課程設(shè)計功能要求設(shè)計人性化的導(dǎo)航界面,方便用戶根據(jù)自己實際需要查詢的信息選擇相應(yīng)的
17、菜單,完成導(dǎo)航功能。</p><p> 主界面中應(yīng)包括的選項有:</p><p> (1) 兩點最短距離導(dǎo)航 </p><p> (2) 某點到其他所有點的最短距離 </p><p> (3) 退出導(dǎo)航系統(tǒng) </p><p> 選擇功能號后,還應(yīng)提示用戶輸入待查地點編
18、號信息。</p><p> 2.2.3 求最短路徑模塊</p><p> 本模塊的基本思想是采用迪杰斯特拉算法[2]求最短路徑,是本校園導(dǎo)航系統(tǒng)的核心模塊,求兩點間的最短路徑與求一點到其他所有點最短路徑兩個子功能均是在最短路徑算法模塊的基礎(chǔ)上進行調(diào)用,進而實現(xiàn)導(dǎo)航功能。</p><p> 2.2.4 主函數(shù)模塊</p><p>
19、主函數(shù)模塊是整個程序的入口,包括對各變量、數(shù)據(jù)結(jié)構(gòu)以及要使用的函數(shù)的聲明等。</p><p> 主函數(shù)中其他功能函數(shù)調(diào)用有一定的順序。首先調(diào)用導(dǎo)航圖的建立函數(shù),構(gòu)建可視化導(dǎo)航菜單;然后獲取用戶的輸入,并根據(jù)輸入調(diào)用相應(yīng)的功能函數(shù),實現(xiàn)導(dǎo)航系統(tǒng)的功能。</p><p><b> 3 流程圖</b></p><p> 3.1 系統(tǒng)運行流程
20、圖</p><p> 3.2 迪杰斯特拉算法流程圖</p><p> 圖3.2 迪杰斯特拉算法流程圖</p><p> 4 功能模塊代碼實現(xiàn)</p><p> 4.1 創(chuàng)建無向圖函數(shù)</p><p> int CreateUDN(MGraph &G)</p><p>
21、 函數(shù)描述:主要將每個節(jié)點進行命名、每個頂點到其他所有定點的路徑值用鄰接矩陣進行存儲[1]。</p><p><b> 例:</b></p><p> G.vexs[0] = "南門"; </p><p> 作用:使0號定點命名為“南門”; </p><p> G.arcs[0][1] = G
22、.arcs[1][0] =20;</p><p> 作用:使0號節(jié)點到1號節(jié)點的路徑賦值為20,應(yīng)為是無向圖,所以1號節(jié)點到0號節(jié)點的路徑長度也應(yīng)賦值為20。</p><p><b> 具體賦值如下:</b></p><p> G.arcs[0][1] = G.arcs[1][0] =20;</p><p>
23、G.arcs[0][5] = G.arcs[5][0] =100;</p><p> G.arcs[0][6] = G.arcs[6][0] =80;</p><p> G.arcs[1][2] = G.arcs[2][1] =50;</p><p> G.arcs[2][3] = G.arcs[3][2] =200; </p><
24、p> G.arcs[2][4] = G.arcs[4][2] =50;</p><p> G.arcs[3][4] = G.arcs[4][3] =200;</p><p> G.arcs[3][23] = G.arcs[23][3]=1500;</p><p> G.arcs[4][5] = G.arcs[5][4] =20;</p>
25、;<p> G.arcs[5][6] = G.arcs[6][5] =80; </p><p> G.arcs[6][7] = G.arcs[7][6] =80;</p><p> G.arcs[7][8] = G.arcs[8][7] =50;</p><p> G.arcs[7][9] = G.arcs[9][7] =60; &l
26、t;/p><p> G.arcs[8][10] = G.arcs[10][8] =220;</p><p> G.arcs[8][18] = G.arcs[18][8] =200; </p><p> G.arcs[8][21] = G.arcs[21][8] =130;</p><p> G.arcs[10][11]= G.arcs[
27、11][10] =150; </p><p> G.arcs[10][25]= G.arcs[25][10] =120;</p><p> G.arcs[11][12]= G.arcs[12][11] =120;</p><p> G.arcs[12][13]= G.arcs[13][12] =20;</p><p> G.arcs[
28、12][26]= G.arcs[26][12] =150;</p><p> G.arcs[13][14]= G.arcs[14][13] =50;</p><p> G.arcs[13][15]= G.arcs[15][13] =100;</p><p> G.arcs[13][17]= G.arcs[17][13] =70;</p><
29、p> G.arcs[13][20]= G.arcs[20][13] =30;</p><p> G.arcs[13][24]= G.arcs[24][13] =20;</p><p> G.arcs[14][15]= G.arcs[15][14] =70;</p><p> G.arcs[14][16]= G.arcs[16][14] =100;<
30、;/p><p> G.arcs[15][16]= G.arcs[16][15] =60; </p><p> G.arcs[15][17]= G.arcs[17][15] =50;</p><p> G.arcs[17][18]= G.arcs[18][17] =80;</p><p> G.arcs[17][19]= G.arcs[1
31、9][17] =120;</p><p> G.arcs[18][19]= G.arcs[19][18] =110; </p><p> G.arcs[18][20]= G.arcs[20][18] =50;</p><p> G.arcs[19][21]= G.arcs[21][19] =100;</p><p> G.arcs[1
32、9][22]= G.arcs[22][19] =80; </p><p> G.arcs[20][24]= G.arcs[24][20] =20;</p><p> G.arcs[25][26]= G.arcs[26][25] =30;</p><p><b> 導(dǎo)航菜單生成</b></p><p> void
33、menu()</p><p> 函數(shù)描述:輸出各個節(jié)點的編號,及本系統(tǒng)所提供的查詢方式,方便導(dǎo)航。</p><p> 具體導(dǎo)航菜單設(shè)計如下:</p><p> void menu()</p><p><b> {</b></p><p> printf("☆ ☆ ☆ ☆ ☆ ☆
34、 ☆ ☆ ☆ ☆ 導(dǎo)航主菜單 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ \n");</p><p> printf("☆ (1) 南門 (2) 行政樓 (3) 學(xué)生會堂 ☆ \n");</p><p> printf("☆ (4) C 區(qū) (5) 靜明湖
35、 (6) 圖書館 ☆ \n");</p><p> printf("☆ (7) 分析測試中心 (8) 第二教學(xué)樓 (9) 羽毛球場 ☆ \n");</p><p> printf("☆ (10) 勵志樓 (11) 學(xué)生公寓中心 (12) 食堂區(qū)
36、 ☆ \n");</p><p> printf("☆ (13) 醫(yī)務(wù)室 (14) 凌云樓 (15) 籃球場 ☆ \n");</p><p> printf("☆ (16) 生化樓 (17) 東門 (18) 文德樓 ☆ \
37、n");</p><p> printf("☆ (19) 排球場 (20) 第一教學(xué)樓 (21) 學(xué)生活動中心 ☆ \n");</p><p> printf("☆ (22) 足球場 (23) 北門 (24) 西苑 ☆ \n");<
38、/p><p> printf("☆ (25) 學(xué)生洗滌中心 (26) 開水房 (27) 自助服務(wù)點 ☆ \n");</p><p> printf("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ \n\n");</p><p> printf
39、("請選擇導(dǎo)航功能:\n");</p><p> printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");</p><p> printf("≈ (1) 兩點最短距離導(dǎo)航 ≈\n");</p><p> printf("≈ (2) 某點到其他所有點的
40、最短距離 ≈\n");</p><p> printf("≈ (3) 退出導(dǎo)航系統(tǒng) ≈\n");</p><p> printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");</p><p><b> }</b></p><
41、;p><b> 最短路徑求解函數(shù)</b></p><p> void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[])</p><p> 函數(shù)描述:用Dijkstra算法求無向網(wǎng)G的V0定點到其余定點V的最短路徑P[v]及其帶權(quán)長度D[v][5]。若P[v][w]為True,則w是從V0
42、到V當(dāng)前求得最短路徑上的頂點。Final[v]為True當(dāng)且僅當(dāng)V∈S,即已經(jīng)求得從V0到V的最短路徑。</p><p> 利用迪杰斯特拉算法設(shè)計最短路徑算法如下:</p><p> void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[])</p><p><b> { &
43、lt;/b></p><p> int v,w,i,j,min;</p><p> int final[MAX_V];</p><p><b> int k=1;</b></p><p> for(v=0;v<G.vexnum;++v)</p><p><b> {
44、//初始化</b></p><p> final[v]=0;</p><p> d[v]=G.arcs[v0-1][v];</p><p> for(w=0;w<G.vexnum;++w)</p><p> p[v][w]=0;</p><p> if(d[v]<INFINITY)&l
45、t;/p><p><b> {</b></p><p> p[v][v0-1]=1;</p><p> p[v][v]=1;</p><p><b> }</b></p><p><b> }</b></p><p> d
46、[v0-1]=0;</p><p> final[v0-1]=1;</p><p> have[0]=v0-1;</p><p> for(i=1;i<G.vexnum;++i)</p><p> {//其余的vexnum-1個頂點</p><p> min=INFINITY;</p>&
47、lt;p> for(w=0;w<G.vexnum;++w)</p><p> if(!final[w])</p><p> if(d[w]<min) //如有W點離更近</p><p><b> {</b></p><p><b> v=w;</b></p>
48、<p><b> min=d[w];</b></p><p><b> }</b></p><p> final[v]=1;</p><p> have[k]=v;</p><p><b> k++;</b></p><p> f
49、or(w=0;w<G.vexnum;++w)//更新當(dāng)前最短路徑及距離</p><p> if(!final[w]&&(min+G.arcs[v][w]<d[w]))</p><p><b> {</b></p><p> d[w]=min+G.arcs[v][w];</p><p>
50、 for(j=0;j<G.vexnum;j++)</p><p> p[w][j]=p[v][j];</p><p> p[w][w]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }&l
51、t;/b></p><p><b> 5 運行調(diào)試</b></p><p><b> 查詢系統(tǒng)導(dǎo)航界面</b></p><p> 圖5.1 查詢系統(tǒng)導(dǎo)航截圖</p><p><b> 兩點最短距離導(dǎo)航</b></p><p> 圖5.
52、2 兩點最短距離導(dǎo)航截圖</p><p> 某點到其他所有點最短距離</p><p> 圖5.3 任意點到其他各點最短路徑截圖</p><p><b> 退出系統(tǒng)</b></p><p> 圖5.4 退出系統(tǒng)截圖</p><p><b> 程序設(shè)計總結(jié)</b>
53、</p><p><b> 7 參考文獻</b></p><p> [1]《數(shù)據(jù)結(jié)構(gòu)》(C語言版),嚴(yán)蔚敏,清華大學(xué)出版社,2005.</p><p> [2]《算法設(shè)計與分析》,王曉東主編,清華大學(xué)出版社,2005</p><p> [3]汪詩林等譯,《數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用》,(美)Sartaj Sahni著
54、,機械工業(yè)出版社, 1999</p><p> [4]《數(shù)據(jù)結(jié)構(gòu)與算法分析》,CLIFFORD A. SHAFFER著,張銘、劉曉丹譯,電子工業(yè)出版社,1998</p><p> [5] 《計算機算法設(shè)計與分析》,王曉東,電子工業(yè)出版社,2007</p><p> [6] 《數(shù)據(jù)結(jié)構(gòu)與算法使用教程》,劉玉龍,電子工業(yè)大學(xué)出版社,2009</p>
55、<p><b> 附錄 程序清單</b></p><p> #include <stdio.h></p><p> #include <stdlib.h></p><p> #include <string.h></p><p> #define MAX_V 30
56、 //最大頂點個數(shù)</p><p> #define INFINITY 32767 //最大值</p><p> typedef struct</p><p><b> {</b></p><p> char* vexs[MAX_V]; //頂點向量</p><
57、p> int arcs[MAX_V][MAX_V];//鄰接矩陣</p><p> int vexnum,arcnum;//圖的當(dāng)前頂點數(shù)和弧數(shù)</p><p><b> }MGraph;</b></p><p> int have[30];</p><p> void CreateUDN(MGraph
58、&G);//創(chuàng)建導(dǎo)航圖函數(shù)聲明</p><p> void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[]);//最短路徑導(dǎo)航函數(shù)聲明</p><p> void menu();//導(dǎo)航菜單函數(shù)聲明</p><p> void main()</p><p
59、><b> {</b></p><p><b> MGraph G;</b></p><p> int v0,i,end,j;</p><p> int P[MAX_V][MAX_V];</p><p> int D[MAX_V];</p><p> in
60、t choice,choice1;</p><p> printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");</p><p> printf("\n≈≈ 歡迎光臨攀枝花學(xué)院,祝旅程愉快! ≈≈\n");</p><p> printf(&q
61、uot;\n≈≈ 攀枝花學(xué)院校園導(dǎo)游系統(tǒng)為你服務(wù)! ≈≈\n");</p><p> printf("\n≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n\n");CreateUDN(G);</p><p><b> while(1)</b></p><p
62、><b> { </b></p><p><b> menu();</b></p><p> scanf("%d",&choice);</p><p> switch(choice)</p><p><b> {</b></p&
63、gt;<p><b> case 1:</b></p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> printf("分別輸入起點
64、和終點代號以空格分開\n");</p><p> scanf("%d%d",&v0,&end);</p><p> ShortPath(G,v0,P,D);</p><p> printf("最短路徑:\n ");</p><p> for(i=0;i<G.vex
65、num;i++)</p><p><b> { </b></p><p> if(P[end-1][have[i]]==1)</p><p> printf("-->%s",G.vexs[have[i]]);</p><p><b> }</b></p>
66、;<p> printf("\n路徑長度:%d\n",D[end-1]);</p><p> printf("^_^ 本次導(dǎo)航結(jié)束:\n1.繼續(xù)導(dǎo)航 2.返回主菜單\n");</p><p> scanf("%d",&choice1);</p><p> if(cho
67、ice1==2) </p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b&
68、gt; case 2:</b></p><p><b> {</b></p><p> printf("請輸入出發(fā)點:");</p><p> scanf("%d",&v0);</p><p> ShortPath(G,v0,P,D);</p&g
69、t;<p> printf("%s到其他所有點的最短路徑為:\n",G.vexs[v0-1]);</p><p> for(i=0;i<G.vexnum;i++)</p><p><b> {</b></p><p> for(j=0;j<G.vexnum;j++)</p>&
70、lt;p> if(P[i][have[j]]==1)</p><p> printf("-->%s",G.vexs[have[j]]);</p><p> printf("\n路徑長度:%d\n",D[i]);</p><p><b> }</b></p>&
71、lt;p><b> }</b></p><p><b> break;</b></p><p><b> case 3:</b></p><p><b> break;</b></p><p><b> default:</
72、b></p><p> printf("選擇錯誤,請重新輸入!\n");</p><p><b> }</b></p><p> if(choice==3)</p><p><b> {</b></p><p> printf(&qu
73、ot;歡迎再次使用校園導(dǎo)航系統(tǒng),回車鍵退出。^_^\n");</p><p> getchar();</p><p> getchar();</p><p><b> break;</b></p><p><b> }</b></p><p><b&g
74、t; }</b></p><p><b> }</b></p><p> void CreateUDN(MGraph &G)</p><p> {//采用數(shù)組(鄰接矩陣)表示法,構(gòu)造無向網(wǎng)G.</p><p> int i = 0,j=0;</p><p> G.
75、vexnum = 27; </p><p> G.arcnum = 51;</p><p> G.vexs[0] = "南門"; G.vexs[1] = "行政樓"; G.vexs[2] = "學(xué)生會堂";</p><p> G.vexs[3] = "C區(qū)&q
76、uot;; G.vexs[4] = "靜明湖"; G.vexs[5] = "圖書館";</p><p> G.vexs[6] = "分析測試中心"; G.vexs[7] = "第二教學(xué)樓"; G.vexs[8] = "羽毛球場";</p><p> G.
77、vexs[9] = "勵志樓"; G.vexs[10] = "學(xué)生公寓中心";G.vexs[11] ="食堂區(qū)";</p><p> G.vexs[12] = "醫(yī)務(wù)室"; G.vexs[13] = "凌云樓"; G.vexs[14] = "籃球場";</
78、p><p> G.vexs[15] = "生化樓"; G.vexs[16] = "東門"; G.vexs[17] = "文德樓";</p><p> G.vexs[18] = "排球場"; G.vexs[19] = "第一教學(xué)樓"; G.vexs[20]
79、= "學(xué)生活動中心";</p><p> G.vexs[21] = "足球場"; G.vexs[22] = "北門"; G.vexs[23] = "西苑";</p><p> G.vexs[24] = "學(xué)生洗滌中心";G.vexs[25] = "開水房
80、"; G.vexs[26] = "自助服務(wù)點";</p><p> for(i=0;i<G.vexnum;i++) //初始化路徑長度</p><p> for(j=0;j<G.vexnum;j++)</p><p><b> {</b></p><p><
81、;b> if(i==j)</b></p><p> G.arcs[i][j]=0;</p><p><b> else </b></p><p> G.arcs[i][j]=INFINITY;</p><p><b> }</b></p><p>
82、<b> //為每一條邊賦權(quán)</b></p><p> G.arcs[0][1] = G.arcs[1][0] =20;</p><p> G.arcs[0][5] = G.arcs[5][0] =100;</p><p> G.arcs[0][6] = G.arcs[6][0] =80;</p><p>
83、 G.arcs[1][2] = G.arcs[2][1] =50;</p><p> G.arcs[2][3] = G.arcs[3][2] =200; </p><p> G.arcs[2][4] = G.arcs[4][2] =50;</p><p> G.arcs[3][4] = G.arcs[4][3] =200;</p>&l
84、t;p> G.arcs[3][23] = G.arcs[23][3]=1500;</p><p> G.arcs[4][5] = G.arcs[5][4] =20;</p><p> G.arcs[5][6] = G.arcs[6][5] =80; </p><p> G.arcs[6][7] = G.arcs[7][6] =80;</p&
85、gt;<p> G.arcs[7][8] = G.arcs[8][7] =50;</p><p> G.arcs[7][9] = G.arcs[9][7] =60; </p><p> G.arcs[8][10] = G.arcs[10][8] =220;</p><p> G.arcs[8][18] = G.arcs[18][8] =2
86、00; </p><p> G.arcs[8][21] = G.arcs[21][8] =130;</p><p> G.arcs[10][11]= G.arcs[11][10] =150; </p><p> G.arcs[10][25]= G.arcs[25][10] =120;</p><p> G.arcs[11][12]=
87、 G.arcs[12][11] =120;</p><p> G.arcs[12][13]= G.arcs[13][12] =20;</p><p> G.arcs[12][26]= G.arcs[26][12] =150;</p><p> G.arcs[13][14]= G.arcs[14][13] =50;</p><p> G
88、.arcs[13][15]= G.arcs[15][13] =100;</p><p> G.arcs[13][17]= G.arcs[17][13] =70;</p><p> G.arcs[13][20]= G.arcs[20][13] =30;</p><p> G.arcs[13][24]= G.arcs[24][13] =20;</p>
89、<p> G.arcs[14][15]= G.arcs[15][14] =70;</p><p> G.arcs[14][16]= G.arcs[16][14] =100;</p><p> G.arcs[15][16]= G.arcs[16][15] =60; </p><p> G.arcs[15][17]= G.arcs[17][15]
90、=50;</p><p> G.arcs[17][18]= G.arcs[18][17] =80;</p><p> G.arcs[17][19]= G.arcs[19][17] =120;</p><p> G.arcs[18][19]= G.arcs[19][18] =110; </p><p> G.arcs[18][20]=
91、G.arcs[20][18] =50;</p><p> G.arcs[19][21]= G.arcs[21][19] =100;</p><p> G.arcs[19][22]= G.arcs[22][19] =80; </p><p> G.arcs[20][24]= G.arcs[24][20] =20;</p><p> G.
92、arcs[25][26]= G.arcs[26][25] =30;</p><p><b> }</b></p><p> void ShortPath(MGraph &G,int v0,int p[MAX_V][MAX_V],int d[])</p><p> { //迪杰斯特拉發(fā)求最短路徑</p><p
93、> int v,w,i,j,min;</p><p> int final[MAX_V];</p><p><b> int k=1;</b></p><p> for(v=0;v<G.vexnum;++v)</p><p><b> {//初始化</b></p>
94、<p> final[v]=0;</p><p> d[v]=G.arcs[v0-1][v];</p><p> for(w=0;w<G.vexnum;++w)</p><p> p[v][w]=0;</p><p> if(d[v]<INFINITY)</p><p><b&g
95、t; {</b></p><p> p[v][v0-1]=1;</p><p> p[v][v]=1;</p><p><b> }</b></p><p><b> }</b></p><p> d[v0-1]=0;</p><p
96、> final[v0-1]=1;</p><p> have[0]=v0-1;</p><p> for(i=1;i<G.vexnum;++i)</p><p> {//其余的vexnum-1個頂點</p><p> min=INFINITY;</p><p> for(w=0;w<G.v
97、exnum;++w)</p><p> if(!final[w])</p><p> if(d[w]<min) //如有W點離更近</p><p><b> {</b></p><p><b> v=w;</b></p><p><b> min=d
98、[w];</b></p><p><b> }</b></p><p> final[v]=1;</p><p> have[k]=v;</p><p><b> k++;</b></p><p> for(w=0;w<G.vexnum;++w)/
99、/更新當(dāng)前最短路徑及距離</p><p> if(!final[w]&&(min+G.arcs[v][w]<d[w]))</p><p><b> {</b></p><p> d[w]=min+G.arcs[v][w];</p><p> for(j=0;j<G.vexnum;j++
100、)</p><p> p[w][j]=p[v][j];</p><p> p[w][w]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&
101、gt; void menu()</p><p><b> {</b></p><p> printf("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ 導(dǎo)航主菜單 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ \n");</p><p> printf("☆ (1) 南門 (2) 行政樓
102、 (3) 學(xué)生會堂 ☆ \n");</p><p> printf("☆ (4) C 區(qū) (5) 靜明湖 (6) 圖書館 ☆ \n");</p><p> printf("☆ (7) 分析測試中心 (8) 第二教學(xué)樓 (9)
103、 羽毛球場 ☆ \n");</p><p> printf("☆ (10) 勵志樓 (11) 學(xué)生公寓中心 (12) 食堂區(qū) ☆ \n");</p><p> printf("☆ (13) 醫(yī)務(wù)室 (14) 凌云樓 (15) 籃球場 ☆ \
104、n");</p><p> printf("☆ (16) 生化樓 (17) 東門 (18) 文德樓 ☆ \n");</p><p> printf("☆ (19) 排球場 (20) 第一教學(xué)樓 (21) 學(xué)生活動中心 ☆ \n");</
105、p><p> printf("☆ (22) 足球場 (23) 北門 (24) 西苑 ☆ \n");</p><p> printf("☆ (25) 學(xué)生洗滌中心 (26) 開水房 (27) 自助服務(wù)點 ☆ \n");</p><p&
106、gt; printf("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ \n\n");</p><p> printf("請選擇導(dǎo)航功能:\n");</p><p> printf("≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n");</p><p>
107、printf("≈ (1) 兩點最短距離導(dǎo)航 ≈\n");</p><p> printf("≈ (2) 某點到其他所有點的最短距離 ≈\n");</p><p> printf("≈ (3) 退出導(dǎo)航系統(tǒng) ≈\n");</p><p&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園導(dǎo)航系統(tǒng)---算法及分析課程設(shè)計
- 校園導(dǎo)航系統(tǒng)課程設(shè)計
- 校園導(dǎo)航系統(tǒng)---算法與分析課程設(shè)計
- 《校園導(dǎo)航系統(tǒng)》課程設(shè)計報告
- 校園導(dǎo)航系統(tǒng)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-校園導(dǎo)航系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--校園導(dǎo)航系統(tǒng)
- 校園導(dǎo)航系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--校園導(dǎo)航系統(tǒng)
- 校園導(dǎo)航系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 算法課程設(shè)計—校園導(dǎo)航問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計導(dǎo)航系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計導(dǎo)航系統(tǒng)
- c語言課程設(shè)計---交通模擬導(dǎo)航系統(tǒng)
- 校園導(dǎo)航系統(tǒng)需求分析
- 基于qt的校園導(dǎo)航系統(tǒng)
- android校園地圖導(dǎo)航系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-校園導(dǎo)航
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計校園導(dǎo)航
- 18643.校園導(dǎo)航系統(tǒng)的設(shè)計與實現(xiàn)
評論
0/150
提交評論