![數(shù)據(jù)結構課程設計-校園導游咨詢_第1頁](http://file4.renrendoc.com/view14/M0A/26/3C/wKhkGWdzzUmALayRAACbt8uCVUk615.jpg)
![數(shù)據(jù)結構課程設計-校園導游咨詢_第2頁](http://file4.renrendoc.com/view14/M0A/26/3C/wKhkGWdzzUmALayRAACbt8uCVUk6152.jpg)
![數(shù)據(jù)結構課程設計-校園導游咨詢_第3頁](http://file4.renrendoc.com/view14/M0A/26/3C/wKhkGWdzzUmALayRAACbt8uCVUk6153.jpg)
![數(shù)據(jù)結構課程設計-校園導游咨詢_第4頁](http://file4.renrendoc.com/view14/M0A/26/3C/wKhkGWdzzUmALayRAACbt8uCVUk6154.jpg)
![數(shù)據(jù)結構課程設計-校園導游咨詢_第5頁](http://file4.renrendoc.com/view14/M0A/26/3C/wKhkGWdzzUmALayRAACbt8uCVUk6155.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)結構課程設計--校園導游咨詢數(shù)據(jù)結構課程設計--校園導游咨詢數(shù)據(jù)結構課程設計--校園導游咨詢數(shù)據(jù)結構課程設計--校園導游咨詢編制僅供參考審核批準生效日期地址:電話:傳真:郵編:瓊州學院電子信息工程學院課程設計報告課程名稱:《數(shù)據(jù)結構》課程設計設計題目:校園導游咨詢專業(yè):軟件工程班級:2010軟件工程學生姓名:學號:起止日期:指導教師:指導教師評語:最終成績:指導教師簽名:年月日成績評定項目權重成績1、設計過程中的學習態(tài)度0.22、課程設計的質量及答辯0.53、設計報告書規(guī)范程度0.34、總成績注意事項一、設計目的《數(shù)據(jù)結構》是一門實踐性較強的軟件基礎課,為了學好這門課程,必須在掌握理論知識的同時,加強上機實踐。本課程設計的目的就是要達到理論與實際應用相結合,使同學們能夠根據(jù)數(shù)據(jù)對象的特性,學會數(shù)據(jù)組織的方法,能把現(xiàn)實世界中的實際問題在計算機內部表示出來,并培養(yǎng)基本的、良好的程序設計技能。二、設計要求1.通過這次課程設計,要求在數(shù)據(jù)結構的邏輯特性和物理表示、數(shù)據(jù)結構的選擇應用、算法的設計及其實現(xiàn)等方面加深課程基本內容的理解。同時,在程序設計方法以及上機操作等基本技能和科學作風方面受到比較系統(tǒng)和嚴格的訓練。2.學生必須仔細研讀《數(shù)據(jù)結構》課程設計要求,以學生自學為主、指導教師指導為輔,獨立完成課程設計的任務,有問題及時主動與指導教師溝通。3.本次課程設計按照教學要求需要在本學期15周前完成,學生要發(fā)揮自主學習的能力,充分利用時間,安排好課程設計的時間計劃,并在課程設計過程中不斷檢測自己的計劃完成情況,及時向指導教師匯報。4.編程語言:C語言。三、課程設計說明書的格式要求設計文檔的撰寫必須提前進行,以保證使文檔與程序同步提交。1.設計題目2.運行環(huán)境(軟、硬件環(huán)境)3.算法的需求分析4.算法概要設計5.算法詳細設計6.算法的測試7.運行結果分析8.收獲及體會四、問題分析、設計和測試過程要規(guī)范化1.需求分析:將題目中要求的功能進行敘述分析。2.概要設計:算法的設計說明,描述解決此問題的數(shù)據(jù)存儲結構,(有些題目已經指定了數(shù)據(jù)存儲的,按照指定的設計),描述算法建議使用流程圖,進行算法分析指明關鍵語句的時間復雜度。3.詳細設計:即各個算法的具體實現(xiàn)步驟,每個題目要有相應的源程序,其中每個功能模塊采用不同的函數(shù)實現(xiàn)。源程序要規(guī)范編寫:結構要清晰,注釋要清楚。重點函數(shù)的重點變量和重點功能部分要加上清楚的程序注釋。4.調試和測試:給出實現(xiàn)功能的一組或多組測試數(shù)據(jù),程序調試后,將按照此測試數(shù)據(jù)進行測試的結果列出來。在調試過程中遇到的問題和解決方法也要記錄下來。程序要能夠正常運行,還要有基本的容錯功能。盡量避免出現(xiàn)操作錯誤時出現(xiàn)死循環(huán)。5.改進措施:
對有些題目提出算法改進方案,比較不同算法的優(yōu)缺點。五、對指導教師的要求指導教師要關心學生的課程設計進展,認真答疑。對課程設計報告的撰寫要給予充分的指導,報告中切忌出現(xiàn)大篇源代碼,應嚴格要求學生將主要篇幅放在“原理實現(xiàn)”上,即如何用框圖表達設計和實施思想。課程設計報告要用紅筆批閱,最終成績以優(yōu)、良、中、及格與不及格分等計算。目錄摘要 11設計內容和要求 -2-1.1設計內容 -2-1.1設計要求 -2-2概要設計 22.1程序的模塊圖 22.2主函數(shù)的概要設計 32.3查找介紹函數(shù)的概要設計 32.4查找最短路徑函數(shù)的概要設計 32.5景點分布圖的概要設計 32.6退出函數(shù)的概要設計 33詳細設計 53.1程序的流程圖 53.2主函數(shù)的詳細設計 63.3查找介紹函數(shù)的詳細設計 63.4查找最短路徑函數(shù)的詳細設計 73.5景點分布圖的詳細設計 83.6退出函數(shù)的詳細設計 93.7數(shù)據(jù)結構的詳細設計 94軟件測試 104.1菜單的測試 104.2查找景點簡介的測試 114.3查找兩個景點之間的最短距離的測試 124.4查看景點分布圖的測試 134.5退出的測試 145軟件使用說明 156參考文獻 167附錄 177.1系統(tǒng)完整代碼 17摘要現(xiàn)代快節(jié)奏的生活使得都市人越來越渴望親近自然,因此外出旅游現(xiàn)在被越來越多的都市人所看中,所以如何快速方便的找到我們想要的旅游景點的信息和最短路徑就成了一個很重要的問題。本設計基于圖的結構,創(chuàng)建一個無向圖,針對游客的實際需求,將瓊州學院的景點編號、名稱、介紹等信息放入到圖的頂點當中并保存在景點文本文件當中,將兩個景點的編號和它們之間的距離當作權值也保存到權值文本文件當中,利用迪杰斯特拉算法來求從一個景點到另一個景點的最短距離,利用Search();函數(shù)來查找景點,并顯示出它的信息,從而解決了要查找景點信息和景點之間的最短路徑的問題,最后按照顯示屏上的提示進行相關的操作。關鍵詞:分布圖、查找信息、最短距離、校園導游咨詢1設計內容和要求1.1設計內容 依據(jù)課程設計的要求,利用一個無向圖的結構,將景點當作圖的頂點,將景點之間的距離當作權值來儲存,然后根據(jù)游客自己的需求,按照顯示屏上的提示來進行查找景點介紹,查找兩個景點之間的最短距離,退出程序等基本操作。1.1設計要求本軟件為校園導游咨詢系統(tǒng),根據(jù)游客的實際需求而設計,首先創(chuàng)建一個無向圖,然后從文件當中讀取所有景點的編號、名稱、介紹和兩點之間的權值,并將它們寫入到無向圖當中。功能主要包括查找已知景點的信息,查找從一個景點到另一個景點的最短路徑,退出等基本操作。軟件的界面要求使用VC++6.0的運行環(huán)境。軟件的數(shù)據(jù)庫包括校園景點的編號、名稱、介紹和兩個景點之間的距離(權值),首先要定義頂點的數(shù)據(jù)類型結構體,里面包括景點的編號、名稱、介紹,然后定義一個鄰接矩陣結構體來儲存邊的信息,最后定義一個無向圖類型的結構體來儲存頂點的信息,邊的信息,頂點的個數(shù),邊的條數(shù)。最后游客按照顯示屏上的提示來進行相關的操作。2概要設計2.1程序的模塊圖本軟件的算法依據(jù)無向圖的操作通過查找函數(shù)查找景點的信息,通過費洛伊德函數(shù)來查找最短距離,開始時首先從文件當中讀取景點的編號、名稱、介紹和兩個景點之間的距離即權值,然后將其加入到圖當中,再調用查找函數(shù)查找景點的信息,調用費洛伊德函數(shù)來查找最短距離,調用退出函數(shù)實現(xiàn)退出功能,其模塊圖如圖2.5所示:開始開始加入圖加入圖分布圖退出最短距離查找信息分布圖退出最短距離查找信息屏幕顯示屏幕顯示屏幕顯示屏幕顯示屏幕顯示屏幕顯示圖2.5模塊圖2.2主函數(shù)的概要設計 基于程序的操作要求,對于主函數(shù)的設計首先是顯示一個可視化的操作界面提醒游客進行相關的操作和提示游客其可供選擇的景點的名稱,便于其在后面的操作過程當中能夠快速方便的找到其需要查找的景點的名稱。而后就是一個switch();的選擇函數(shù),提供查找景點信息,查找兩個景點之間的最短距離和退出的相關的選擇操作而后進入到每一個操作界面當中,從而實現(xiàn)所需要的功能。2.3查找介紹函數(shù)的概要設計 當游客選擇了要查找景點的信息的介紹這一項功能的時候,就會進入到查找的界面,對于查找景點信息就是利用Search();函數(shù),當游客輸入景點的名稱的時候看其是否與文件當中的數(shù)據(jù)相匹配,如果有則輸出它的介紹,如果沒有則輸出錯誤的提示提醒游客進行相關的操作來進入到正確的操作過程當中。2.4查找最短路徑函數(shù)的概要設計 對于查找最短路徑的這一項功能,可以利用迪杰斯特拉算法,但我是用的費洛伊德算法,相對來說步驟跟簡單一點。后面有詳細介紹。2.5景點分布圖的概要設計先手稿繪制所有景點的分布,利用printf();函數(shù)打印分布圖的框架構造。各景點之間用線條鏈接,通過分布圖能全面的對校園各景點有個方位感。2.6退出函數(shù)的概要設計 關于退出函數(shù),則是當游客執(zhí)行完了他想要進行的操作過后選擇退出的功能的時候就調用退出函數(shù)exit(0);跳入到退出界面實現(xiàn)退出的功能。3詳細設計3.1程序的流程圖 當我們想要更加實際的了解一個程序的算法過程的時候,我們就要依據(jù)程序的流程圖來給我們一個比較實際的過程,從流程圖當中能夠更加清楚整個程序實現(xiàn)的過程是怎樣的。其流程圖如圖3.1所示:startstart創(chuàng)建無向圖寫入無向圖中Case3Case2Case1查找信息最短路徑TTFFCase4分布圖TendF圖3.1流程圖3.2主函數(shù)的詳細設計 主函數(shù)是一個程序的主體,當我們要進行我們所需要的操作的時候我們就要根據(jù)主函數(shù)中的顯示信息和它給我們的相關的提示信息來進行所需要的操作,因此在這次的程序實現(xiàn)的過程當中,調用 Browser();提示游客根據(jù)switch();的選擇語句,選擇來進入到相關的操作界面實現(xiàn)程序的基本功能。,3.3查找介紹函數(shù)的詳細設計 當游客選擇了要查找景點的信息的介紹這一項功能的時候,程序就會調用Search();函數(shù)進入到查找景點的介紹的界面,當游客輸入了需要查找的景點的編號的時候,程序通過結構體,自動匹配相應的信息,查找是否有這個景點。voidSearch(MGraph*G){ intk,flag=1; while(flag){ printf("請輸入要查詢的景點編號:"); scanf("%d",&k); if(k<=0||k>G->vexnum){ printf("景點編號不存在!請重新輸入景點編號:"); scanf("%d",&k); } if(k>0&&k<=G->vexnum)flag=0; } printf("\n┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("┃編號┃景點名稱┃簡介┃\n"); printf("┃%-4d┃%-16s┃%-62s┃\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction); printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");},找到將它的編號返回,并輸出它的介紹,沒有找到這輸出錯誤提示,提醒游客進行相關的操作進入正確的操作過程當中。3.4查找最短路徑函數(shù)的詳細設計 當游客選擇了要查找兩個景點之間的最短距離這一項功能的時候,函數(shù)進入到查找兩個景點之間的最短距離的操作界面當中,當游客輸入了兩個景點的名稱過后,程序會判斷是否有這兩個景點,如果有則返回他們各自的編號,并調用Floyd();函數(shù)進入到查找最短路徑問題的程序當中。voidFloyd(MGraph*G){ intv,u,i,w,k,j,flag=1,p[14][14][14],D[14][14]; for(v=1;v<=G->vexnum;v++) for(w=1;w<=G->vexnum;w++) { D[v][w]=G->arcs[v][w].adj; for(u=1;u<=G->vexnum;u++) p[v][w][u]=0; if(D[v][w]<INFINITY) { p[v][w][v]=1;p[v][w][w]=1; } } for(u=1;u<=G->vexnum;u++) for(v=1;v<=G->vexnum;v++) for(w=1;w<=G->vexnum;w++) if(D[v][u]+D[u][w]<D[v][w]) { D[v][w]=D[v][u]+D[u][w]; for(i=1;i<=G->vexnum;i++) p[v][w][i]=p[v][u][i]||p[u][w][i]; } while(flag) { printf("請輸入出發(fā)點和目的地的編號:"); scanf("%d%d",&k,&j); if(k<=0||k>G->vexnum||j<=0||j>G->vexnum) { printf("景點編號不存在!請重新輸入出發(fā)點和目的地的編號:"); scanf("%d%d",&k,&j); } if(k==j) { printf("出發(fā)點和目的地一樣!請重新輸入出發(fā)點和目的地的編號:"); scanf("%d%d",&k,&j); } if(k>0&&k<=G->vexnum&&j>0&&j<=G->vexnum) flag=0; } printf("\n最短游覽路線:%s",G->vexs[k].name); if(k>j){ for(u=G->vexnum;u>0;u--) if(p[k][j][u]&&k!=u&&j!=u) printf("-->%s",G->vexs[u].name);} if(k<j){ for(u=1;u<=G->vexnum;u++) if(p[k][j][u]&&k!=u&&j!=u) printf("-->%s",G->vexs[u].name);} printf("-->%s",G->vexs[j].name); printf("總路線長%dm\n",D[k][j]);} 已知有n個頂點的有向圖,佛洛伊德算法可以求解出每一對頂點之間的最短路徑。假設使用鄰接矩陣d(i,j)來對圖進行存儲,d(i,j)表示υi到υj之間的距離,但是該距離不一定是最短距離。佛洛伊德算法的基本思想是:為求頂點υi→υj之間的最短距離,需要進行n次試探。首先將υ0加入路徑,考慮路徑υi→υ0→υj是否存在,如果存在,則比較υi→υj和υi→υ0→υj的路徑長度,取長度短的路徑作為υi→υj的路徑,記作(υi,υj)。接著在路徑上再增加一個頂點υ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后,最短路徑上頂點的變化情況,這樣就求得了最短路徑和最短路徑長度。3.5景點分布圖的詳細設計 這里不詳細介紹,具體代碼,查看附錄browse_view_distribute()函數(shù)。3.6退出函數(shù)的詳細設計 對于退出函數(shù),當游客選擇了退出這一個操作的時候,程序就會調用exit(0);函數(shù)實現(xiàn)退出主函數(shù)的功能。最后會提示游客,歡迎下次繼續(xù)使用!3.7數(shù)據(jù)結構的詳細設計 本軟件的數(shù)據(jù)結構包括3個部分:鄰接矩陣typedefintAdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];定義一個鄰接矩陣,用鄰接矩陣來定義和儲存邊的相關信息。2.頂點的結構體typedefstructVertex//定義圖中頂點的數(shù)據(jù)類型{ intnum;//景點編號 charname[30];//景點名稱 charintroduction[200];//景點介紹}Vertex;定義一個頂點的結構體,用來儲存景點的編號、景點得名稱和景點的介紹等關于景點的信息。3.無向圖的結構體typedefstruct//定義圖的數(shù)據(jù)類型{ Vertexvexs[MAX_VERTEX_NUM];//頂點的結構體 AdjMatrixarcs;//邊的鄰接矩陣 intvexnum,arcnum;//頂點的個數(shù),邊的個數(shù)}MGraph;定義一個圖的結構體,用來儲存頂點的信息、邊的信息、頂點的個數(shù)和邊的個數(shù)等相關的信息便于我們以后在用的時候能夠方便快捷的調用。定義好這些結構體后,當我們以后需要調用的時候,我們就能夠方便快捷的調用這些結構體,從而使得我們在運行程序的時候能夠更加的快速能夠提高我們的程序的運行效率,大大的節(jié)省了我們的時間還使得程序變得更加的簡單。4軟件測試4.1菜單的測試 對于菜單函數(shù)的測試,首先菜單是一個可示化的界面,它能夠提示游客依據(jù)顯示屏上出現(xiàn)的提示來進行相關的操作,查看所有的景點從而方便游客進行相關的操作,因而我們在運行程序的時候首先就會進入到菜單函數(shù)當中,經過測試其能夠實現(xiàn)我們所要實現(xiàn)得基本功能,其效果圖如圖4.1所示:圖4.1菜單4.2查找景點簡介的測試 對于查找景點的介紹的測試,首先依據(jù)顯示屏上的提示首先輸入要進行的操作輸入3進入查找景點信息的操作界面,然后輸入需要查找的景點的名稱即可顯示出景點的介紹信息,經過測試可以得出其沒有什么錯誤,程序能夠按照我的要求實現(xiàn)它的功能,其效果圖如圖4.2所示:圖4.2查找景點信息4.3查找兩個景點之間的最短距離的測試 同查找景點的信息一樣,對于查找景點之間的最短距離的測試,我們就要依據(jù)提示輸入2進入到查詢最短路徑的界面,依次輸入所需要查找的兩個景點就會顯示出怎樣到達這兩個景點并顯示出它們之間的最短路徑,經過測試可見程序能夠按照我的要求來實現(xiàn)其所需要的功能,其效果圖如圖4.3所示:圖4.3查找兩個景點之間的最短距離4.4查看景點分布圖的測試對于查看景點分布圖的測試,我需要依據(jù)顯示屏上的提示,需要輸入1進入到分布圖的界面,系統(tǒng)就會直接調用browse_view_distribute();函數(shù),在屏幕上打印出景點的分布圖。圖4.4景點分布圖界面4.5退出的測試 原理同上,對于退出函數(shù)的測試,我需要依據(jù)顯示屏上的提示,需要輸入4進入到退出的界面,系統(tǒng)就會直接調用退出的函數(shù),顯示出“歡迎下次繼續(xù)使用!”的話,退出了系統(tǒng),其效果圖如圖4.4所示:圖4.5退出界面5軟件使用說明 對于軟件的使用,對于第一次使用軟件的游客來說,要讓他們在第一次用的時候就能夠快速輕松的掌握軟件的用法,因此在程序一開始運行的時候,我們要進行如下的操作:(1)首先我會給游客提供一個可視化的菜單操作界面,在顯示屏上提示用戶其可以進行的操作和他能夠查詢的景點的編號、名稱。(2)用戶輸入了“1”后,屏幕上會顯示出所有景點的位置關系平面圖。能夠大致了解景點的分布。(3)當用戶輸入了“2”后,進入到查詢任意兩景點間最短路徑的界面,然后提示用戶依次輸入兩個景點的編號,程序就會將這兩個景點的最短路徑給我們表示出來并顯示出最短路徑是多少。(4)用戶輸入了“3”后,進入到查詢景點信息的界面,然后提示用戶輸入景點的編號(一次限一個),程序就會顯示出這個景點的詳細介紹。(5)當用戶輸入了“4”后,進入到退出界面,這時系統(tǒng)就會顯示“歡迎下次繼續(xù)使用!”的提示語,最后按下任意鍵退出系統(tǒng)。6參考文獻數(shù)據(jù)結構(C語言版)嚴蔚敏吳偉民編著清華大學出版社2002C程序設計經典教程,[美]Deitel,H.M.,[美]Deitel,P.J.著,清華大學出版社2006Windows程序設計,[美]CharlesPetzold著,北京大學出版社2004DataStructures:APseudecode(ApproachwithC)[美]RichardF.Gilberg,[美]BehrouzA.Forouzan著7附錄7.1系統(tǒng)完整代碼#defineINFINITY10000/*無窮大*/#defineMAX_VERTEX_NUM40#defineMAX40#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<string.h>#include"Exit.h"typedefstructArCell{ intadj;//路徑長度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct//圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,{ charname[30]; intnum; charintroduction[200];//簡介}infotype;typedefstruct{ infotypevexs[MAX_VERTEX_NUM];//景點 AdjMatrixarcs;//路徑數(shù)組 intvexnum,arcnum;//景點數(shù),路徑長度記錄}MGraph;MGraphb;//全局變量voidcmd(void);//在主函數(shù)中用來調用其他應用子函數(shù)的函數(shù)聲明MGraphInitGraph(void);//用來構造學校地圖的子函數(shù)返回MGraph類型voidMenu(void);//菜單函數(shù);voidBrowser(MGraph*G);//調用MGraph類型的地址,進行voidShortestPath_DIJ(MGraph*G);//迪杰斯特拉算法求最短路徑的子函數(shù)voidFloyd(MGraph*G);//佛洛伊德算法voidSearch(MGraph*G);//尋找要查詢的景點,并輸出該景點的信息voidbrowse_view_distribute();//查看景點分布圖voidtou(MGraph*G);//景點列表voidpanduan();//voidExit();//退出intLocateVex(MGraph*G,char*v);//定點位置MGraph*CreatUDN(MGraph*G);////初始化圖形,接受用戶輸入voidprint(MGraph*G);//打印輸出子函數(shù)/******************************************************/voidmain(void){ system("color1f");//設置調試窗口背景和字體顏色 system("modecon:cols=140lines=130");//設置調試窗口的大小 cmd();//用該函數(shù)來調用其他需要用到的函數(shù)}/******************************************************/voidcmd(void)//用來調用其他需要用到的函數(shù)的子函數(shù){ inti; b=InitGraph();//構造校園地圖 Browser(&b);//Menu();//調用菜單函數(shù) scanf("%d",&i); while(i!=4) { switch(i) { case1:system("cls");/*ShortestPath_DIJ(&b);*/browse_view_distribute();Browser(&b);break; case2:system("cls");tou(&b);Floyd(&b);Browser(&b);break; case3:system("cls");tou(&b);Search(&b);Browser(&b);break; case4:exit(0);break; default:break; } scanf("%d",&i); } printf("歡迎下次繼續(xù)使用!\n\n");}//*******************************************************************MGraphInitGraph(void)//構造校園地圖{ MGraphG; inti,j; G.vexnum=13;//景點數(shù)量 G.arcnum=21;//路徑數(shù)量 for(i=1;i<=G.vexnum;i++) G.vexs[i].num=i;//對景點進行對應編號/*對對應的景點編號進行命名,輸入簡介*/ strcpy(G.vexs[3].name,"行政辦公樓");strcpy(G.vexs[3].introduction,"學校的行政機構。"); strcpy(G.vexs[6].name,"圖書館"); strcpy(G.vexs[6].introduction,"體積龐大,是學校的標志性建筑,目前還在建設中。"); strcpy(G.vexs[2].name,"果園"); strcpy(G.vexs[2].introduction,"枝葉茂盛,各種新鮮水果。");strcpy(G.vexs[1].name,"校門"); strcpy(G.vexs[1].introduction,"學校的形象,氣勢宏偉。"); strcpy(G.vexs[4].name,"體育運動區(qū)"); strcpy(G.vexs[4].introduction,"包括有排球場、籃球場、網(wǎng)球場等。"); strcpy(G.vexs[5].name,"教學區(qū)"); strcpy(G.vexs[5].introduction,"包括左教學樓、小湖、右教學樓、實驗樓和醫(yī)務室等。"); strcpy(G.vexs[10].name,"男生宿舍"); strcpy(G.vexs[10].introduction,"分1、2、7、8棟,供男同學居住,女生勿進。"); strcpy(G.vexs[7].name,"琴房"); strcpy(G.vexs[7].introduction,"音樂學院學生練琴的地方。"); strcpy(G.vexs[8].name,"足球場"); strcpy(G.vexs[8].introduction,"踢球,跑步,運動比賽場地。"); strcpy(G.vexs[9].name,"省高速路"); strcpy(G.vexs[9].introduction,"上面是省高速路,下面是人行隧道。"); strcpy(G.vexs[11].name,"食堂"); strcpy(G.vexs[11].introduction,"分1、2、3、4樓,價格有所不同,根據(jù)自己愛好,隨意點菜。"); strcpy(G.vexs[12].name,"女生宿舍"); strcpy(G.vexs[12].introduction,"樓下一“愛心”超市,價格絕對不便宜。樓上女同學居住,男生勿進。"); strcpy(G.vexs[13].name,"教師村"); strcpy(G.vexs[13].introduction,"老師們的居住地,10多樓高。");//對有路的各景點之間的路徑長度進行設置,沒路的設置為無窮大for(i=1;i<=G.vexnum;i++)for(j=1;j<=G.vexnum;j++) G.arcs[i][j].adj=INFINITY; G.arcs[1][3].adj=100; G.arcs[1][2].adj=100; G.arcs[1][5].adj=200; G.arcs[2][4].adj=100; G.arcs[2][3].adj=150; G.arcs[3][5].adj=200; G.arcs[3][8].adj=300; G.arcs[4][5].adj=100; G.arcs[4][7].adj=150; G.arcs[5][6].adj=100; G.arcs[6][7].adj=150; G.arcs[6][8].adj=100; G.arcs[7][9].adj=50; G.arcs[8][9].adj=200; G.arcs[8][13].adj=200; G.arcs[9][10].adj=200; G.arcs[9][11].adj=150; G.arcs[9][12].adj=200; G.arcs[10][11].adj=100; G.arcs[11][12].adj=150; G.arcs[12][13].adj=150;//無向圖的路徑是相互的for(i=1;i<=G.vexnum;i++) for(j=1;j<=G.vexnum;j++) G.arcs[j][i].adj=G.arcs[i][j].adj;returnG;}//InitGraphend//*******************************************************************/*//菜單函數(shù),打印出導游項目菜單voidMenu(){ printf("\n瓊州學院校園導游圖\n"); printf("┏━━┳━━━━━━━━━━━━━━━━━━┓\n");printf("┃編號┃實現(xiàn)的功能┃\n"); printf("┣━━╋━━━━━━━━━━━━━━━━━━┫\n"); printf("┃1┃查看景點分布圖┃\n"); printf("┣━━╋━━━━━━━━━━━━━━━━━━┫\n"); printf("┃2┃查找兩景點間最短距離┃\n"); printf("┣━━╋━━━━━━━━━━━━━━━━━━┫\n");printf("┃3┃查看景點信息┃\n"); printf("┣━━╋━━━━━━━━━━━━━━━━━━┫\n");printf("┃4┃退出系統(tǒng)┃\n"); printf("┗━━┻━━━━━━━━━━━━━━━━━━┛\n"); printf("輸入你的操作編號:");}*///*******************************************************************//輸出所有景點信息voidBrowser(MGraph*G){ intv; printf("┏━━┳━━━━━━┓\n"); printf("┃編號┃景點名稱┃\n"); for(v=1;v<=G->vexnum;v++){ printf("┃%-4d┃%-12s┃",G->vexs[v].num,G->vexs[v].name); switch(v+2){ case4:printf("瓊州學院校園導游圖\n");break; case5:printf("┏━━┳━━━━━━━━━━━━━━━━┓\n");break; case6:printf("┃編號┃實現(xiàn)的功能┃\n");break; case7:printf("┣━━╋━━━━━━━━━━━━━━━━┫\n");break; case8:printf("┃1┃查看景點分布圖┃\n");break; case9:printf("┣━━╋━━━━━━━━━━━━━━━━┫\n");break; case10:printf("┃2┃查找兩景點間最短距離┃\n");break; case11:printf("┣━━╋━━━━━━━━━━━━━━━━┫\n");break; case12:printf("┃3┃查看景點信息┃\n");break; case13:printf("┣━━╋━━━━━━━━━━━━━━━━┫\n");break; case14:printf("┃4┃退出系統(tǒng)┃\n");break; case15:printf("┗━━┻━━━━━━━━━━━━━━━━┛\n");break; default:printf("\n");break; }} printf("┗━━┻━━━━━━┛\n"); printf("輸入你的操作編號:");}//*******************************************************************/*//迪杰斯特拉算法來計算出起點到各個頂點之間的最短路徑,v0為起點voidShortestPath_DIJ(MGraph*G){ intv,w,i,min,t=0,x,flag=1,v0;intfinal[20],D[20],p[20][20]; while(flag) { printf("請輸入一個起始景點編號:"); scanf("%d",&v0); if(v0<=0||v0>G->vexnum) { printf("景點編號不存在!請重新輸入景點編號:"); scanf("%d",&v0); printf("\n"); } if(v0>0&&v0<=G->vexnum) flag=0; } for(v=1;v<=G->vexnum;v++) { final[v]=0; D[v]=G->arcs[v0][v].adj; for(w=1;w<=G->vexnum;w++) p[v][w]=0; if(D[v]<INFINITY) { p[v][v0]=1;p[v][v]=1; } } D[v0]=0;final[v0]=1; for(i=1;i<=G->vexnum;i++) { min=INFINITY; for(w=1;w<=G->vexnum;w++) if(!final[w]) if(D[w]<min){v=w;min=D[w];} final[v]=1; for(w=1;w<=G->vexnum;w++) if(!final[w]&&(min+G->arcs[v][w].adj<D[w])) { D[w]=min+G->arcs[v][w].adj; for(x=1;x<=G->vexnum;x++) p[w][x]=p[v][x]; p[w][w]=1; } } for(v=1;v<=G->vexnum;v++) { if(v0!=v)printf("%s",G->vexs[v0].name); for(w=v0;w>0;w--) { p[v][v0-v]=0; if(p[v][w]&&w!=v0)printf("-->%s",G->vexs[w].name); t++; printf("yyyy"); } for(w=v0-1;w<=G->vexnum;w++) { if(p[v][w]&&w!=v0)printf("-->%s",G->vexs[w].name); t++; printf("xxxx"); } if(t>G->vexnum-1&&v0!=v)printf("總路線長%dm\n\n",D[v]); }}//ShortestPath_DIJend*///*******************************************************************voidFloyd(MGraph*G){ intv,u,i,w,k,j,flag=1,p[14][14][14],D[14][14]; for(v=1;v<=G->vexnum;v++) for(w=1;w<=G->vexnum;w++) { D[v][w]=G->arcs[v][w].adj; for(u=1;u<=G->vexnum;u++) p[v][w][u]=0; if(D[v][w]<INFINITY) { p[v][w][v]=1;p[v][w][w]=1; } } for(u=1;u<=G->vexnum;u++) for(v=1;v<=G->vexnum;v++) for(w=1;w<=G->vexnum;w++) if(D[v][u]+D[u][w]<D[v][w]) { D[v][w]=D[v][u]+D[u][w]; for(i=1;i<=G->vexnum;i++) p[v][w][i]=p[v][u][i]||p[u][w][i]; } while(flag) { printf("請輸入出發(fā)點和目的地的編號:"); scanf("%d%d",&k,&j); if(k<=0||k>G->vexnum||j<=0||j>G->vexnum) { printf("景點編號不存在!請重新輸入出發(fā)點和目的地的編號:"); scanf("%d%d",&k,&j); } if(k==j) { printf("出發(fā)點和目的地一樣!請重新輸入出發(fā)點和目的地的編號:"); scanf("%d%d",&k,&j); } if(k>0&&k<=G->vexnum&&j>0&&j<=G->vexnum) flag=0; } printf("\n最短游覽路線:%s",G->vexs[k].name); if(k>j){ for(u=G->vexnum;u>0;u--) if(p[k][j][u]&&k!=u&&j!=u) printf("-->%s",G->vexs[u].name);} if(k<j){ for(u=1;u<=G->vexnum;u++) if(p[k][j][u]&&k!=u&&j!=u) printf("-->%s",G->vexs[u].name);} printf("-->%s",G->vexs[j].name); printf("總路線長%dm\n",D[k][j]);}//Floydend//****************************************************************//尋找要查詢的景點,并輸出該景點的信息voidSearch(MGraph*G){ intk,flag=1; while(flag) { printf("請輸入要查詢的景點編號:"); scanf("%d",&k); if(k<=0||k>G->vexnum) { printf("景點編號不存在!請重新輸入景點編號:"); scanf("%d",&k); } if(k>0&&k<=G->vexnum) flag=0; } printf("\n┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("┃編號┃景點名稱┃簡介┃\n"); printf("┃%-4d┃%-16s┃%-62s┃\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction); printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}//Searchend//*******************************************************************intLocateVex(MGraph*G,char*v){ intc=-1,i; for(i=1;i<=G->vexnum;i++) if(strcmp(v,G->vexs[i].name)==0) {c=i;break;} returnc;}//******************************************************************MGraph*CreatUDN(MGraph*G)//初始化圖形,接受用戶輸入{ inti,j,k,w; charv1[20],v2[20]; printf("請輸入圖的頂點數(shù),弧數(shù):"); scanf("%d%d",&G->vexnum,&G->arcnum); printf("請輸入景點的編號:、名稱、簡介:\n"); for(i=1;i<=G->vexnum;i++) { printf("景點編號:"); scanf("%d",&G->vexs->num); printf("景點名稱:"); scanf("%s",G->vexs[i].name); printf("景點簡介:"); scanf("%s",G->vexs->introduction); } for(i=1;i<=G->vexnum;i++) for(j=1;j<=G->vexnum;j++) G->arcs[i][j].adj=INFINITY; printf("請輸入路徑長度:\n"); for(k=1;k<=G->arcnum;k++) { printf("第%d條邊:\n",k+1); printf("景點對(x,y):"); scanf("%s",v1); scanf("%s",v2); printf("路徑長度:"); scanf("%d",&w); i=LocateVex(G,v1); j=LocateVex(G,v2); if(i>0&&j>0) { G->arcs[i][j].adj=w; G->arcs[j][i]=G->arcs[i][j]; } }returnG;}//*******************************************************************voidbrowse_view_distribute(){//查看景點分布圖,3 printf("§·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·§\n"); printf("§§\n"); printf("§┏━━━━━┓┏━━━━━┓┏━━━━━┓┏━━━━━┓§\n"); printf("§┃┃┃┃┃┃┃┃§\n"); printf("§┃┃┃┃┃┃┃┃§\n"); printf("§┃⒑男生宿舍┣┅┫⒒食堂┣┅┅┫⒓女生宿舍┣┅┅┫⒔教師村┃§\n"); printf("§┃┃┃┃┃┃┃┃§\n"); printf("§┃┃┃┃┃┃┃┃§\n"); printf("§┗━━┳━━┛┗━━┳━━┛┗━━┳━━┛┗━━━┳━┛§\n"); printf("§┏━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━━┇━┓§\n");printf("§┃┇┃§\n"); printf("§┃-----------⒐省高速路-----------┇-┃§\n");printf("§┃┇┃§\n");printf("§┗━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━┇━┛§\n"); printf("§┏━━┻━━┓┏━━━━━━━━━━━━┓┏┻━━━┻━┓§\n"); printf("§┃┃┃┃┃┃§\n"); printf("§┃┃┃┃┃┃§\n"); printf("§┃⒎琴房┣┅┅┫⒍圖書館
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年存儲用貴金屬材料合作協(xié)議書
- 八年級英語下冊 Unit 1 單元綜合測試卷(人教河南版 2025年春)
- 2025年城市輪渡服務合作協(xié)議書
- 2025年五年級班級管理工作總結模版(三篇)
- 2025年互感器租賃合同范文(2篇)
- 2025年交通銀行外匯商品房抵押貸款合同模板(三篇)
- 2025年中外來件裝配協(xié)議樣本(三篇)
- 2025年二年級數(shù)學第一期教學工作總結模版(二篇)
- 2025年二年級上冊美術教學工作總結范例(2篇)
- 2025年個人租車協(xié)議合同(2篇)
- 二零二五年度大型自動化設備買賣合同模板2篇
- 江西省部分學校2024-2025學年高三上學期1月期末英語試題(含解析無聽力音頻有聽力原文)
- GA/T 2145-2024法庭科學涉火案件物證檢驗實驗室建設技術規(guī)范
- 2025內蒙古匯能煤化工限公司招聘300人高頻重點提升(共500題)附帶答案詳解
- 2025年中國融通資產管理集團限公司春季招聘(511人)高頻重點提升(共500題)附帶答案詳解
- 寵物護理行業(yè)客戶回訪制度構建
- 電廠檢修管理
- 《SPIN銷售法課件》課件
- GB/T 4214.1-2017家用和類似用途電器噪聲測試方法通用要求
- GB/T 11822-2000科學技術檔案案卷構成的一般要求
- 壓力管道基本知識課件
評論
0/150
提交評論