版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 課程名稱: 《數(shù)據(jù)結構》課程設計 </p><p> 設計題目: 校園導游咨詢 </p><p> 專 業(yè): 軟件工程 </p><p> 班 級: 2010軟
2、件工程 </p><p> 學生姓名: </p><p> 學 號: </p><p> 起止日期: </p><p> 指導教師:
3、 </p><p><b> 注意事項</b></p><p><b> 一、設計目的</b></p><p> 《數(shù)據(jù)結構》是一門實踐性較強的軟件基礎課,為了學好這門課程,必須在掌握理論知識的同時,加強上機實踐。本課程設計的目的就是要達到理論與實際應用相結合,使同學們能夠根據(jù)數(shù)據(jù)對象的特性,學會數(shù)
4、據(jù)組織的方法,能把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)基本的、良好的程序設計技能。</p><p><b> 二、設計要求</b></p><p> 1.通過這次課程設計,要求在數(shù)據(jù)結構的邏輯特性和物理表示、數(shù)據(jù)結構的選擇應用、算法的設計及其實現(xiàn)等方面加深課程基本內(nèi)容的理解。同時,在程序設計方法以及上機操作等基本技能和科學作風方面受到比較系統(tǒng)和嚴格的訓
5、練。</p><p> 2.學生必須仔細研讀《數(shù)據(jù)結構》課程設計要求,以學生自學為主、指導教師指導為輔,獨立完成課程設計的任務,有問題及時主動與指導教師溝通。</p><p> 3.本次課程設計按照教學要求需要在本學期15周前完成,學生要發(fā)揮自主學習的能力,充分利用時間,安排好課程設計的時間計劃,并在課程設計過程中不斷檢測自己的計劃完成情況,及時向指導教師匯報。</p>
6、<p> 4.編程語言:C 語言。</p><p> 三、課程設計說明書的格式要求 </p><p> 設計文檔的撰寫必須提前進行,以保證使文檔與程序同步提交。 </p><p> 1.設計題目 2.運行環(huán)境(軟、硬件環(huán)境)</p><p> 3.算法的需求分析
7、 4.算法概要設計</p><p> 5.算法詳細設計 6.算法的測試</p><p> 7.運行結果分析 8.收獲及體會</p><p> 四、問題分析、設計和測試過程要規(guī)范化</p><p> 1.需求分析:將題目中要求的功能進行敘述分析。</p><
8、;p> 2.概要設計:算法的設計說明,描述解決此問題的數(shù)據(jù)存儲結構,(有些題目已經(jīng)指定了數(shù)據(jù)存儲的,按照指定的設計),描述算法建議使用流程圖,進行算法分析指明關鍵語句的時間復雜度。</p><p> 3.詳細設計:即各個算法的具體實現(xiàn)步驟,每個題目要有相應的源程序,其中每個功能模塊采用不同的函數(shù)實現(xiàn)。源程序要規(guī)范編寫:結構要清晰,注釋要清楚。重點函數(shù)的重點變量和重點功能部分要加上清楚的程序注釋。<
9、/p><p> 4.調試和測試:給出實現(xiàn)功能的一組或多組測試數(shù)據(jù),程序調試后,將按照此測試數(shù)據(jù)進行測試的結果列出來 。在調試過程中遇到的問題和解決方法也要記錄下來。程序要能夠正常運行,還要有基本的容錯功能。盡量避免出現(xiàn)操作錯誤時出現(xiàn)死循環(huán)。</p><p> 5.改進措施: 對有些題目提出算法改進方案,比較不同算法的優(yōu)缺點。</p><p> 五、對指導
10、教師的要求</p><p> 指導教師要關心學生的課程設計進展,認真答疑。對課程設計報告的撰寫要給予充分的指導,報告中切忌出現(xiàn)大篇源代碼,應嚴格要求學生將主要篇幅放在“原理實現(xiàn)”上,即如何用框圖表達設計和實施思想。課程設計報告要用紅筆批閱,最終成績以優(yōu)、良、中、及格與不及格分等計算。</p><p><b> 目錄</b></p><p>
11、<b> 摘要1</b></p><p> 1 設計內(nèi)容和要求- 2 -</p><p> 1.1設計內(nèi)容- 2 -</p><p> 1.1設計要求- 2 -</p><p><b> 2 概要設計2</b></p><p> 2.1 程序的模塊圖2
12、</p><p> 2.2 主函數(shù)的概要設計3</p><p> 2.3 查找介紹函數(shù)的概要設計3</p><p> 2.4 查找最短路徑函數(shù)的概要設計3</p><p> 2.5 景點分布圖的概要設計3</p><p> 2.6 退出函數(shù)的概要設計3</p><p><
13、;b> 3 詳細設計5</b></p><p> 3.1 程序的流程圖5</p><p> 3.2 主函數(shù)的詳細設計6</p><p> 3.3 查找介紹函數(shù)的詳細設計6</p><p> 3.4 查找最短路徑函數(shù)的詳細設計7</p><p> 3.5 景點分布圖的詳細設計8&
14、lt;/p><p> 3.6 退出函數(shù)的詳細設計9</p><p> 3.7 數(shù)據(jù)結構的詳細設計9</p><p><b> 4 軟件測試10</b></p><p> 4.1 菜單的測試10</p><p> 4.2 查找景點簡介的測試11</p><p>
15、; 4.3 查找兩個景點之間的最短距離的測試12</p><p> 4.4 查看景點分布圖的測試13</p><p> 4.5 退出的測試14</p><p> 5 軟件使用說明15</p><p><b> 6 參考文獻16</b></p><p><b> 7
16、附錄17</b></p><p> 7.1 系統(tǒng)完整代碼17</p><p><b> 摘要</b></p><p> 現(xiàn)代快節(jié)奏的生活使得都市人越來越渴望親近自然,因此外出旅游現(xiàn)在被越來越多的都市人所看中,所以如何快速方便的找到我們想要的旅游景點的信息和最短路徑就成了一個很重要的問題。</p><p&
17、gt; 本設計基于圖的結構,創(chuàng)建一個無向圖,針對游客的實際需求,將瓊州學院的景點編號、名稱、介紹等信息放入到圖的頂點當中并保存在景點文本文件當中,將兩個景點的編號和它們之間的距離當作權值也保存到權值文本文件當中,利用迪杰斯特拉算法來求從一個景點到另一個景點的最短距離,利用Search( );函數(shù)來查找景點,并顯示出它的信息,從而解決了要查找景點信息和景點之間的最短路徑的問題,最后按照顯示屏上的提示進行相關的操作。</p>
18、<p> 關鍵詞:分布圖、查找信息、最短距離、校園導游咨詢</p><p><b> 1 設計內(nèi)容和要求</b></p><p><b> 1.1設計內(nèi)容</b></p><p> 依據(jù)課程設計的要求,利用一個無向圖的結構,將景點當作圖的頂點,將景點之間的距離當作權值來儲存,然后根據(jù)游客自己的需求,按照
19、顯示屏上的提示來進行查找景點介紹,查找兩個景點之間的最短距離,退出程序等基本操作。</p><p><b> 1.1設計要求</b></p><p> 本軟件為校園導游咨詢系統(tǒng),根據(jù)游客的實際需求而設計,首先創(chuàng)建一個無向圖,然后從文件當中讀取所有景點的編號、名稱、介紹和兩點之間的權值,并將它們寫入到無向圖當中。功能主要包括查找已知景點的信息,查找從一個景點到另一個
20、景點的最短路徑,退出等基本操作。</p><p> 軟件的界面要求使用VC++6.0的運行環(huán)境。</p><p> 軟件的數(shù)據(jù)庫包括校園景點的編號、名稱、介紹和兩個景點之間的距離(權值),首先要定義頂點的數(shù)據(jù)類型結構體,里面包括景點的編號、名稱、介紹,然后定義一個鄰接矩陣結構體來儲存邊的信息,最后定義一個無向圖類型的結構體來儲存頂點的信息,邊的信息,頂點的個數(shù),邊的條數(shù)。</p&
21、gt;<p> 最后游客按照顯示屏上的提示來進行相關的操作。</p><p><b> 2 概要設計</b></p><p> 2.1 程序的模塊圖</p><p> 本軟件的算法依據(jù)無向圖的操作通過查找函數(shù)查找景點的信息,通過費洛伊德函數(shù)來查找最短距離,開始時首先從文件當中讀取景點的編號、名稱、介紹和兩個景點之間的距離即
22、權值,然后將其加入到圖當中,再調用查找函數(shù)查找景點的信息,調用費洛伊德函數(shù)來查找最短距離,調用退出函數(shù)實現(xiàn)退出功能,其模塊圖如圖2.5所示:</p><p><b> 圖2.5模塊圖</b></p><p> 2.2 主函數(shù)的概要設計</p><p> 基于程序的操作要求,對于主函數(shù)的設計首先是顯示一個可視化的操作界面提醒游客進行相關的操
23、作和提示游客其可供選擇的景點的名稱,便于其在后面的操作過程當中能夠快速方便的找到其需要查找的景點的名稱。而后就是一個switch();的選擇函數(shù),提供查找景點信息,查找兩個景點之間的最短距離和退出的相關的選擇操作而后進入到每一個操作界面當中,從而實現(xiàn)所需要的功能。</p><p> 2.3 查找介紹函數(shù)的概要設計</p><p> 當游客選擇了要查找景點的信息的介紹這一項功能的時候,就
24、會進入到查找的界面,對于查找景點信息就是利用Search( );函數(shù),當游客輸入景點的名稱的時候看其是否與文件當中的數(shù)據(jù)相匹配,如果有則輸出它的介紹,如果沒有則輸出錯誤的提示提醒游客進行相關的操作來進入到正確的操作過程當中。</p><p> 2.4 查找最短路徑函數(shù)的概要設計</p><p> 對于查找最短路徑的這一項功能,可以利用迪杰斯特拉算法,但我是用的費洛伊德算法,相對來說步驟
25、跟簡單一點。后面有詳細介紹。</p><p> 2.5 景點分布圖的概要設計</p><p> 先手稿繪制所有景點的分布,利用printf();函數(shù)打印分布圖的框架構造。各景點之間用線條鏈接,通過分布圖能全面的對校園各景點有個方位感。</p><p> 2.6 退出函數(shù)的概要設計</p><p> 關于退出函數(shù),則是當游客執(zhí)行完了他想
26、要進行的操作過后選擇退出的功能的時候就調用退出函數(shù)exit(0);跳入到退出界面實現(xiàn)退出的功能。</p><p><b> 3 詳細設計</b></p><p> 3.1 程序的流程圖</p><p> 當我們想要更加實際的了解一個程序的算法過程的時候,我們就要依據(jù)程序的流程圖來給我們一個比較實際的過程,從流程圖當中能夠更加清楚整個程序實
27、現(xiàn)的過程是怎樣的。其流程圖如圖3.1所示:</p><p><b> 圖3.1流程圖</b></p><p> 3.2 主函數(shù)的詳細設計</p><p> 主函數(shù)是一個程序的主體,當我們要進行我們所需要的操作的時候我們就要根據(jù)主函數(shù)中的顯示信息和它給我們的相關的提示信息來進行所需要的操作,因此在這次的程序實現(xiàn)的過程當中,調用Browse
28、r();提示游客根據(jù)switch();的選擇語句,選擇來進入到相關的操作界面實現(xiàn)程序的基本功能。, </p><p> 3.3 查找介紹函數(shù)的詳細設計</p><p> 當游客選擇了要查找景點的信息的介紹這一項功能的時候,程序就會調用Search( );函數(shù)進入到查找景點的介紹的界面,當游客輸入了需要查找的景點的編號的時候,程序通過結構體,自動匹配相應的信息,查找是否有這個景點。<
29、;/p><p> void Search(MGraph *G)</p><p><b> {</b></p><p> int k,flag=1;</p><p> while(flag){</p><p> printf("請輸入要查詢的景點編號:");</p&g
30、t;<p> scanf("%d",&k);</p><p> if(k<=0||k>G->vexnum){</p><p> printf("景點編號不存在!請重新輸入景點編號:");</p><p> scanf("%d",&k);</p&g
31、t;<p><b> }</b></p><p> if(k>0&&k<=G->vexnum) flag=0;</p><p><b> }</b></p><p> printf("\n┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━
32、━━━━━━━━━━┓\n");</p><p> printf("┃編號┃景點名稱 ┃簡介 ┃\n");</p><p> printf("┃%-4d┃%-16s┃%-62s┃\n",G->vexs[k
33、].num,G->vexs[k].name,G->vexs[k].introduction);</p><p> printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");</p><p> },找到將它的編號返回,并輸出它的介紹,沒有找到這輸出錯誤提示,提醒游客進行相關的操作進入正確的操作過程當
34、中。</p><p> 3.4 查找最短路徑函數(shù)的詳細設計</p><p> 當游客選擇了要查找兩個景點之間的最短距離這一項功能的時候,函數(shù)進入到查找兩個景點之間的最短距離的操作界面當中,當游客輸入了兩個景點的名稱過后,程序會判斷是否有這兩個景點,如果有則返回他們各自的編號,并調用Floyd( );函數(shù)進入到查找最短路徑問題的程序當中。</p><p> vo
35、id Floyd(MGraph *G)</p><p><b> {</b></p><p> int v,u,i,w,k,j,flag=1,p[14][14][14],D[14][14];</p><p> for(v=1;v<=G->vexnum;v++)</p><p> for(w=1;w&l
36、t;=G->vexnum;w++)</p><p><b> {</b></p><p> D[v][w]=G->arcs[v][w].adj;</p><p> for(u=1;u<=G->vexnum;u++)</p><p> p[v][w][u]=0;</p><
37、;p> if(D[v][w]<INFINITY)</p><p><b> {</b></p><p> p[v][w][v]=1;p[v][w][w]=1;</p><p><b> }</b></p><p><b> }</b></p>
38、<p> for(u=1;u<=G->vexnum;u++)</p><p> for(v=1;v<=G->vexnum;v++)</p><p> for(w=1;w<=G->vexnum;w++)</p><p> if(D[v][u]+D[u][w]<D[v][w])</p><
39、p><b> {</b></p><p> D[v][w]=D[v][u]+D[u][w];</p><p> for(i=1;i<=G->vexnum;i++)</p><p> p[v][w][i]=p[v][u][i] || p[u][w][i];</p><p><b> }
40、</b></p><p> while(flag)</p><p><b> {</b></p><p> printf("請輸入出發(fā)點和目的地的編號:");</p><p> scanf("%d%d",&k,&j);</p>&l
41、t;p> if(k<=0 || k>G->vexnum || j<=0 || j>G->vexnum)</p><p><b> {</b></p><p> printf("景點編號不存在!請重新輸入出發(fā)點和目的地的編號:");</p><p> scanf("%
42、d%d",&k,&j);</p><p><b> }</b></p><p><b> if(k==j)</b></p><p><b> {</b></p><p> printf("出發(fā)點和目的地一樣!請重新輸入出發(fā)點和目的地的
43、編號:");</p><p> scanf("%d%d",&k,&j);</p><p><b> }</b></p><p> if(k>0 && k<=G->vexnum && j>0 && j<=G->v
44、exnum)</p><p><b> flag=0;</b></p><p><b> }</b></p><p> printf("\n最短游覽路線:%s",G->vexs[k].name);</p><p><b> if(k>j){</
45、b></p><p> for(u=G->vexnum;u>0;u--)</p><p> if(p[k][j][u] && k!=u && j!=u)</p><p> printf("-->%s",G->vexs[u].name);}</p><p>
46、<b> if(k<j){</b></p><p> for(u=1;u<=G->vexnum;u++)</p><p> if(p[k][j][u] && k!=u && j!=u)</p><p> printf("-->%s",G->vexs[u].
47、name);}</p><p> printf("-->%s",G->vexs[j].name);</p><p> printf(" 總路線長%dm\n",D[k][j]);</p><p><b> }</b></p><p> 已知有n個頂點的有向圖,佛洛
48、伊德算法可以求解出每一對頂點之間的最短路徑。假設使用鄰接矩陣d ( i, j)來對圖進行存儲, d ( i, j)表示υi 到υj 之間的距離,但是該距離不一定是最短距離。佛洛伊德算法的基本思想是:為求頂點υi→υj 之間的最短距離,需要進行n次試探。首先將υ0 加入路徑,考慮路徑υi →υ0 →υj 是否存在,如果存在,則比較υi →υj和υi →υ0 →υj 的路徑長度,取長度短的路徑作為υi →υj 的路徑,記作(υi ,υj )
49、 。接著在路徑上再增加一個頂點υ1 ,比較υi→υ1 →υj 和(υi ,υj )的路徑長度, 取長度短的路徑作為(υi ,υj) 。不斷將頂點υ2 ,υ3 , .,υn - 1加入進行試探, 最后得到的(υi ,υj )必定為υi →υj 的最短路徑。若使用數(shù)組dk ( i, j)表示加入頂點k后,最短路徑長度的變化情況,使用數(shù)組pk ( i, j)表示加入頂點k后,最短路徑上頂點的變化情況, 這樣就求得了最短路徑和最短路徑長度。&l
50、t;/p><p> 3.5 景點分布圖的詳細設計</p><p> 這里不詳細介紹,具體代碼,查看附錄browse_view_distribute ( ) 函數(shù)。</p><p> 3.6 退出函數(shù)的詳細設計</p><p> 對于退出函數(shù),當游客選擇了退出這一個操作的時候,程序就會調用exit(0); 函數(shù)實現(xiàn)退出主函數(shù)的功能。最后會提
51、示游客,歡迎下次繼續(xù)使用!</p><p> 3.7 數(shù)據(jù)結構的詳細設計</p><p> 本軟件的數(shù)據(jù)結構包括3個部分:</p><p><b> 鄰接矩陣</b></p><p> typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];</p&g
52、t;<p> 定義一個鄰接矩陣,用鄰接矩陣來定義和儲存邊的相關信息。</p><p><b> 2. 頂點的結構體</b></p><p> typedef struct Vertex//定義圖中頂點的數(shù)據(jù)類型</p><p><b> {</b></p><p> int
53、num;//景點編號</p><p> char name[30];//景點名稱</p><p> char introduction[200];//景點介紹</p><p><b> }Vertex;</b></p><p> 定義一個頂點的結構體,用來儲存景點的編號、景點得名稱和景點的介紹等關于景點的信息。&
54、lt;/p><p><b> 3.無向圖的結構體</b></p><p> typedef struct //定義圖的數(shù)據(jù)類型</p><p><b> {</b></p><p> Vertex vexs[MAX_VERTEX_NUM];//頂點的結構體</p><p>
55、; AdjMatrix arcs;//邊的鄰接矩陣</p><p> int vexnum,arcnum;//頂點的個數(shù),邊的個數(shù)</p><p><b> }MGraph;</b></p><p> 定義一個圖的結構體,用來儲存頂點的信息、邊的信息、頂點的個數(shù)和邊的個數(shù)等相關的信息便于我們以后在用的時候能夠方便快捷的調用。</p
56、><p> 定義好這些結構體后,當我們以后需要調用的時候,我們就能夠方便快捷的調用這些結構體,從而使得我們在運行程序的時候能夠更加的快速能夠提高我們的程序的運行效率,大大的節(jié)省了我們的時間還使得程序變得更加的簡單。</p><p><b> 4 軟件測試</b></p><p><b> 4.1 菜單的測試</b><
57、;/p><p> 對于菜單函數(shù)的測試,首先菜單是一個可示化的界面,它能夠提示游客依據(jù)顯示屏上出現(xiàn)的提示來進行相關的操作,查看所有的景點從而方便游客進行相關的操作,因而我們在運行程序的時候首先就會進入到菜單函數(shù)當中,經(jīng)過測試其能夠實現(xiàn)我們所要實現(xiàn)得基本功能,其效果圖如圖4.1所示:</p><p><b> 圖4.1菜單</b></p><p>
58、 4.2 查找景點簡介的測試</p><p> 對于查找景點的介紹的測試,首先依據(jù)顯示屏上的提示首先輸入要進行的操作輸入3進入查找景點信息的操作界面,然后輸入需要查找的景點的名稱即可顯示出景點的介紹信息,經(jīng)過測試可以得出其沒有什么錯誤,程序能夠按照我的要求實現(xiàn)它的功能,其效果圖如圖4.2所示:</p><p> 圖4.2查找景點信息</p><p> 4.3
59、 查找兩個景點之間的最短距離的測試</p><p> 同查找景點的信息一樣,對于查找景點之間的最短距離的測試,我們就要依據(jù)提示輸入2進入到查詢最短路徑的界面,依次輸入所需要查找的兩個景點就會顯示出怎樣到達這兩個景點并顯示出它們之間的最短路徑,經(jīng)過測試可見程序能夠按照我的要求來實現(xiàn)其所需要的功能,其效果圖如圖4.3所示:</p><p> 圖4.3查找兩個景點之間的最短距離</p&
60、gt;<p> 4.4 查看景點分布圖的測試</p><p> 對于查看景點分布圖的測試,我需要依據(jù)顯示屏上的提示,需要輸入1進入到分布圖的界面,系統(tǒng)就會直接調用browse_view_distribute();函數(shù),在屏幕上打印出景點的分布圖。</p><p> 圖4.4景點分布圖界面</p><p><b> 4.5 退出的測試&
61、lt;/b></p><p> 原理同上,對于退出函數(shù)的測試,我需要依據(jù)顯示屏上的提示,需要輸入4進入到退出的界面,系統(tǒng)就會直接調用退出的函數(shù),顯示出“歡迎下次繼續(xù)使用!”的話,退出了系統(tǒng),其效果圖如圖4.4所示:</p><p><b> 圖4.5退出界面</b></p><p><b> 5 軟件使用說明</b&
62、gt;</p><p> 對于軟件的使用,對于第一次使用軟件的游客來說,要讓他們在第一次用的時候就能夠快速輕松的掌握軟件的用法,因此在程序一開始運行的時候,我們要進行如下的操作:</p><p> ?。?)首先我會給游客提供一個可視化的菜單操作界面,在顯示屏上提示用戶其可以進行的操作和他能夠查詢的景點的編號、名稱。</p><p> ?。?)用戶輸入了“1”后,屏
63、幕上會顯示出所有景點的位置關系平面圖。能夠大致了解景點的分布。</p><p> ?。?)當用戶輸入了“2”后,進入到查詢?nèi)我鈨删包c間最短路徑的界面,然后提示用戶依次輸入兩個景點的編號,程序就會將這兩個景點的最短路徑給我們表示出來并顯示出最短路徑是多少。</p><p> (4)用戶輸入了“3”后,進入到查詢景點信息的界面,然后提示用戶輸入景點的編號(一次限一個),程序就會顯示出這個景點
64、的詳細介紹。</p><p> (5)當用戶輸入了“4”后,進入到退出界面,這時系統(tǒng)就會顯示“歡迎下次繼續(xù)使用!”的提示語,最后按下任意鍵退出系統(tǒng)。</p><p><b> 6 參考文獻</b></p><p> 數(shù)據(jù)結構(C語言版) 嚴蔚敏 吳偉民 編著 清華大學出版社 2002</p><p> C程序設計
65、經(jīng)典教程,[美]Deitel,H.M.,[美]Deitel,P.J.著,清華大學出版社 2006</p><p> Windows程序設計,[美] Charles Petzold 著,北京大學出版社 2004</p><p> Data Structures:A Pseudecode(Approach with C)[美]Richard F.Gilberg,[美]Behrouz A.F
66、orouzan著</p><p><b> 7 附錄</b></p><p> 7.1 系統(tǒng)完整代碼</p><p> #define INFINITY 10000 /*無窮大*/</p><p> #define MAX_VERTEX_NUM 40</p><
67、p> #define MAX 40</p><p> #include<stdlib.h></p><p> #include<stdio.h></p><p> #include<conio.h></p><p> #include<string.h></p>&
68、lt;p> #include "Exit.h"</p><p> typedef struct ArCell</p><p><b> {</b></p><p> int adj; //路徑長度</p><p> }ArCell,AdjMatrix[MAX_VERTEX_NUM
69、][MAX_VERTEX_NUM];</p><p> typedef struct //圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,</p><p><b> {</b></p><p> char name[30];</p><p><b> int num;</b>&l
70、t;/p><p> char introduction[200];//簡介</p><p> }infotype;</p><p> typedef struct</p><p><b> {</b></p><p> infotype vexs[MAX_VERTEX_NUM];//景點&l
71、t;/p><p> AdjMatrix arcs;//路徑數(shù)組</p><p> int vexnum,arcnum;//景點數(shù),路徑長度記錄</p><p><b> }MGraph;</b></p><p> MGraph b;//全局變量 </p><p> void cmd(void
72、);//在主函數(shù)中用來調用其他應用子函數(shù)的函數(shù)聲明</p><p> MGraph InitGraph(void);//用來構造學校地圖的子函數(shù) 返回MGraph類型</p><p> void Menu(void);//菜單函數(shù);</p><p> void Browser(MGraph *G);//調用MGraph類型的地址,進行</p>&
73、lt;p> void ShortestPath_DIJ(MGraph * G);//迪杰斯特拉算法求最短路徑的子函數(shù)</p><p> void Floyd(MGraph *G);//佛洛伊德算法</p><p> void Search(MGraph *G);//尋找要查詢的景點,并輸出該景點的信息</p><p> void browse_view
74、_distribute();//查看景點分布圖</p><p> void tou(MGraph *G);//景點列表</p><p> void panduan();</p><p> //void Exit();//退出</p><p> int LocateVex(MGraph *G,char* v);//定點位置</p&
75、gt;<p> MGraph * CreatUDN(MGraph *G);////初始化圖形,接受用戶輸入</p><p> void print(MGraph *G);//打印輸出子函數(shù)</p><p> /******************************************************/</p><p> voi
76、d main(void)</p><p><b> {</b></p><p> system("color 1f");//設置調試窗口背景和字體顏色</p><p> system("mode con: cols=140 lines=130");//設置調試窗口的大小</p><
77、;p> cmd();//用該函數(shù)來調用其他需要用到的函數(shù)</p><p><b> }</b></p><p> /******************************************************/</p><p> void cmd(void)//用來調用其他需要用到的函數(shù)的子函數(shù)</p>
78、<p><b> {</b></p><p><b> int i;</b></p><p> b=InitGraph();//構造校園地圖</p><p> Browser(&b);//Menu();//調用菜單函數(shù)</p><p> scanf("%d&
79、quot;,&i);</p><p> while(i!=4)</p><p><b> {</b></p><p><b> switch(i)</b></p><p><b> {</b></p><p> case 1:syste
80、m("cls");/*ShortestPath_DIJ(&b);*/browse_view_distribute();Browser(&b);break;</p><p> case 2:system("cls");tou(&b);Floyd(&b);Browser(&b);break;</p><p>
81、case 3:system("cls");tou(&b);Search(&b);Browser(&b);break;</p><p> case 4:exit(0);break;</p><p> default:break;</p><p><b> }</b></p><
82、p> scanf("%d",&i);</p><p><b> }</b></p><p> printf("歡迎下次繼續(xù)使用 !\n\n");</p><p><b> }</b></p><p> //***************
83、****************************************************</p><p> MGraph InitGraph(void)//構造校園地圖</p><p><b> {</b></p><p><b> MGraph G;</b></p><p>
84、<b> int i,j;</b></p><p> G.vexnum=13;//景點數(shù)量</p><p> G.arcnum=21;//路徑數(shù)量</p><p> for(i=1;i<=G.vexnum;i++)</p><p> G.vexs[i].num=i;//對景點進行對應編號</p>
85、;<p> /*對對應的景點編號進行命名,輸入簡介*/</p><p> strcpy(G.vexs[3].name,"行政辦公樓");</p><p> strcpy(G.vexs[3].introduction,"學校的行政機構。");</p><p> strcpy(G.vexs[6].name,&
86、quot;圖書館");</p><p> strcpy(G.vexs[6].introduction,"體積龐大,是學校的標志性建筑,目前還在建設中。");</p><p> strcpy(G.vexs[2].name,"果園");</p><p> strcpy(G.vexs[2].introduction,
87、"枝葉茂盛,各種新鮮水果。");</p><p> strcpy(G.vexs[1].name,"校門");</p><p> strcpy(G.vexs[1].introduction,"學校的形象,氣勢宏偉。");</p><p> strcpy(G.vexs[4].name,"體育運動
88、區(qū)");</p><p> strcpy(G.vexs[4].introduction,"包括有排球場、籃球場、網(wǎng)球場等。");</p><p> strcpy(G.vexs[5].name,"教學區(qū)");</p><p> strcpy(G.vexs[5].introduction,"包括左教學樓、
89、小湖、右教學樓、實驗樓和醫(yī)務室等。");</p><p> strcpy(G.vexs[10].name,"男生宿舍");</p><p> strcpy(G.vexs[10].introduction,"分1、2、7、8棟,供男同學居住,女生勿進。");</p><p> strcpy(G.vexs[7].n
90、ame,"琴房");</p><p> strcpy(G.vexs[7].introduction,"音樂學院學生練琴的地方。");</p><p> strcpy(G.vexs[8].name,"足球場");</p><p> strcpy(G.vexs[8].introduction,"
91、踢球,跑步,運動比賽場地。");</p><p> strcpy(G.vexs[9].name,"省高速路");</p><p> strcpy(G.vexs[9].introduction,"上面是省高速路,下面是人行隧道。");</p><p> strcpy(G.vexs[11].name,"食
92、堂");</p><p> strcpy(G.vexs[11].introduction,"分1、2、3、4樓,價格有所不同,根據(jù)自己愛好,隨意點菜。");</p><p> strcpy(G.vexs[12].name,"女生宿舍");</p><p> strcpy(G.vexs[12].introduct
93、ion,"樓下一“愛心”超市,價格絕對不便宜。樓上女同學居住,男生勿進。");</p><p> strcpy(G.vexs[13].name,"教師村");</p><p> strcpy(G.vexs[13].introduction,"老師們的居住地,10多樓高。");</p><p> //對
94、有路的各景點之間的路徑長度進行設置,沒路的設置為無窮大</p><p> for(i=1;i<=G.vexnum;i++)</p><p> for(j=1;j<=G.vexnum;j++)</p><p> G.arcs[i][j].adj=INFINITY;</p><p> G.arcs[1][3].adj=100;
95、</p><p> G.arcs[1][2].adj=100;</p><p> G.arcs[1][5].adj=200;</p><p> G.arcs[2][4].adj=100;</p><p> G.arcs[2][3].adj=150;</p><p> G.arcs[3][5].adj=200;
96、</p><p> G.arcs[3][8].adj=300;</p><p> G.arcs[4][5].adj=100;</p><p> G.arcs[4][7].adj=150;</p><p> G.arcs[5][6].adj=100;</p><p> G.arcs[6][7].adj=150;
97、</p><p> G.arcs[6][8].adj=100;</p><p> G.arcs[7][9].adj=50;</p><p> G.arcs[8][9].adj=200;</p><p> G.arcs[8][13].adj=200;</p><p> G.arcs[9][10].adj=200
98、;</p><p> G.arcs[9][11].adj=150;</p><p> G.arcs[9][12].adj=200;</p><p> G.arcs[10][11].adj=100;</p><p> G.arcs[11][12].adj=150;</p><p> G.arcs[12][13]
99、.adj=150;</p><p> //無向圖的路徑是相互的</p><p> for(i=1;i<=G.vexnum;i++)</p><p> for(j=1;j<=G.vexnum;j++)</p><p> G.arcs[j][i].adj=G.arcs[i][j].adj;</p><p&g
100、t;<b> return G;</b></p><p> }//InitGraph end</p><p> //*******************************************************************</p><p> /*//菜單函數(shù),打印出導游項目菜單</p><
101、p> void Menu()</p><p><b> { </b></p><p> printf("\n 瓊州學院校園導游圖\n");</p><p> printf(" ┏
102、━━┳━━━━━━━━━━━━━━━━━━┓\n");</p><p> printf(" ┃編號┃ 實 現(xiàn) 的 功 能 ┃\n");</p><p> printf(" ┣━━╋━━━━━━━━━━━━━━
103、━━━━┫\n");</p><p> printf(" ┃ 1 ┃ 查 看 景 點 分 布 圖 ┃\n");</p><p> printf(" ┣━━╋━━━━━━━━━━━━━━━━━━┫\n");&l
104、t;/p><p> printf(" ┃ 2 ┃ 查 找 兩 景 點 間 最 短 距 離 ┃\n");</p><p> printf(" ┣━━╋━━━━━━━━━━━━━━━━━━┫\n");</p><p>
105、 printf(" ┃ 3 ┃ 查 看 景 點 信 息 ┃\n");</p><p> printf(" ┣━━╋━━━━━━━━━━━━━━━━━━┫\n");</p><p> printf("
106、 ┃ 4 ┃ 退 出 系 統(tǒng) ┃\n");</p><p> printf(" ┗━━┻━━━━━━━━━━━━━━━━━━┛\n");</p><p> printf("輸入你的操作編號:")
107、;</p><p><b> }*/</b></p><p> //*******************************************************************</p><p> //輸出所有景點信息</p><p> void Browser(MGraph *G)<
108、;/p><p><b> {</b></p><p><b> int v;</b></p><p> printf("┏━━┳━━━━━━┓\n");</p><p> printf("┃編號┃景點名稱 ┃\n");</p><
109、p> for(v=1;v<=G->vexnum;v++){</p><p> printf("┃%-4d┃%-12s┃",G->vexs[v].num,G->vexs[v].name);</p><p> switch(v+2){</p><p> case 4:printf("
110、 瓊州學院校園導游圖\n");break;</p><p> case 5:printf(" ┏━━┳━━━━━━━━━━━━━━━━┓\n");break;</p><p> case 6:printf(" ┃編號┃ 實 現(xiàn) 的 功 能 ┃\n");break;</p>&l
111、t;p> case 7:printf(" ┣━━╋━━━━━━━━━━━━━━━━┫\n");break;</p><p> case 8:printf(" ┃ 1 ┃ 查 看 景 點 分 布 圖 ┃\n");break;</p><p> case 9:printf(" ┣━━╋━━━━━━━
112、━━━━━━━━━┫\n");break;</p><p> case 10:printf(" ┃ 2 ┃ 查 找 兩 景 點 間 最 短 距 離 ┃\n");break;</p><p> case 11:printf(" ┣━━╋━━━━━━━━━━━━━━━━┫\n");break;</p><p&
113、gt; case 12:printf(" ┃ 3 ┃ 查 看 景 點 信 息 ┃\n");break;</p><p> case 13:printf(" ┣━━╋━━━━━━━━━━━━━━━━┫\n");break;</p><p> case 14:printf(" ┃ 4 ┃ 退 出
114、系 統(tǒng) ┃\n");break;</p><p> case 15:printf(" ┗━━┻━━━━━━━━━━━━━━━━┛\n");break;</p><p> default:printf("\n");break;</p><p><b> }}&l
115、t;/b></p><p> printf("┗━━┻━━━━━━┛\n");</p><p> printf("輸入你的操作編號:");</p><p><b> }</b></p><p> //**********************************
116、*********************************</p><p> /*// 迪杰斯特拉算法來計算出起點到各個頂點之間的最短路徑,v0為起點</p><p> void ShortestPath_DIJ(MGraph * G)</p><p><b> {</b></p><p> int v,
117、w,i,min,t=0,x,flag=1,v0;</p><p> int final[20], D[20], p[20][20];</p><p> while(flag)</p><p><b> {</b></p><p> printf("請輸入一個起始景點編號:");</p&g
118、t;<p> scanf("%d",&v0);</p><p> if(v0<=0||v0>G->vexnum)</p><p><b> {</b></p><p> printf("景點編號不存在!請重新輸入景點編號:");</p><
119、;p> scanf("%d",&v0);</p><p> printf("\n");</p><p><b> }</b></p><p> if(v0>0&&v0<=G->vexnum)</p><p><b>
120、 flag=0;</b></p><p><b> }</b></p><p> for(v=1;v<=G->vexnum;v++)</p><p><b> {</b></p><p> final[v]=0;</p><p> D[v]
121、=G->arcs[v0][v].adj;</p><p> for(w=1;w<=G->vexnum;w++)</p><p> p[v][w]=0;</p><p> if(D[v]<INFINITY)</p><p><b> {</b></p><p> p
122、[v][v0]=1;p[v][v]=1;</p><p><b> }</b></p><p><b> }</b></p><p> D[v0]=0;final[v0]=1;</p><p> for(i=1;i<=G->vexnum;i++)</p><p
123、><b> {</b></p><p> min=INFINITY;</p><p> for(w=1;w<=G->vexnum;w++)</p><p> if(!final[w])</p><p> if(D[w]<min){v=w;min=D[w];}</p><
124、;p> final[v]=1;</p><p> for(w=1;w<=G->vexnum;w++)</p><p> if(!final[w]&&(min+G->arcs[v][w].adj<D[w]))</p><p><b> {</b></p><p> D
125、[w]=min+G->arcs[v][w].adj;</p><p> for(x=1;x<=G->vexnum;x++) </p><p> p[w][x]=p[v][x];</p><p> p[w][w]=1;</p><p><b> }</b></p><p>
126、<b> }</b></p><p> for(v=1;v<=G->vexnum;v++)</p><p><b> {</b></p><p> if(v0!=v) printf("%s",G->vexs[v0].name);</p><p> fo
127、r(w=v0;w>0;w--)</p><p><b> {</b></p><p> p[v][v0-v]=0;</p><p> if(p[v][w]&&w!=v0) printf("-->%s",G->vexs[w].name);</p><p><
128、;b> t++;</b></p><p> printf("yyyy");</p><p><b> }</b></p><p> for(w=v0-1;w<=G->vexnum;w++)</p><p><b> {</b></p&
129、gt;<p> if(p[v][w]&&w!=v0) printf("-->%s",G->vexs[w].name);</p><p><b> t++;</b></p><p> printf("xxxx");</p><p><b> }&
130、lt;/b></p><p> if(t>G->vexnum-1&&v0!=v)printf(" 總路線長%dm\n\n",D[v]);</p><p><b> }</b></p><p> }//ShortestPath_DIJ end*/</p>&l
131、t;p> //*******************************************************************</p><p> void Floyd(MGraph *G)</p><p><b> {</b></p><p> int v,u,i,w,k,j,flag=1,p[14][14]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結構課程設計-校園導游咨詢
- 數(shù)據(jù)結構課程設計--校園導游咨詢
- 校園導游咨詢系統(tǒng)-數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構校園導游咨詢課程設計報告
- 校園導游咨詢系統(tǒng)---數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計——校園導游咨詢系統(tǒng)
- 數(shù)據(jù)結構課程設計--校園導游的咨詢程序
- 校園導游咨詢系統(tǒng)-中南大學數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構_校園導游系統(tǒng)課程設計
- 數(shù)據(jù)結構課程設計---校園導游系統(tǒng)
- 數(shù)據(jù)結構 校園導游系統(tǒng)課程設計
- 數(shù)據(jù)結構課程設計---校園導游系統(tǒng)設計
- 數(shù)據(jù)結構課程設計---校園交通導游系統(tǒng)
- 數(shù)據(jù)結構課程設計報告--校園導游系統(tǒng)
- 數(shù)據(jù)結構課程設計--校園導游程序
- 數(shù)據(jù)結構課程設計報告-- 校園導游系統(tǒng)
- 數(shù)據(jù)結構課程設計-- 校園導游程序
- 數(shù)據(jù)結構課程設計報告-校園導游程序
- 數(shù)據(jù)結構課程設計報告-校園導游程序
- 數(shù)據(jù)結構課程設計報告-校園導游程序
評論
0/150
提交評論