版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 課程名稱 數(shù)據(jù)結(jié)構(gòu)(基于C語言)課程設(shè)計 </p><p> 題 目 校園導(dǎo)游程序的設(shè)計與實現(xiàn) </p><p> 院 系 _ 信息科學(xué)技術(shù)學(xué)院____</p><p><b> 軟件專題訓(xùn)練任務(wù)書</b></p><p> 校園導(dǎo)游程序
2、 </p><p><b> 一、簡介</b></p><p> 1.設(shè)計目的:通過校園導(dǎo)游程序的設(shè)計與實現(xiàn),熟練掌握圖型結(jié)構(gòu)在實際問題中的應(yīng)用。</p><p> 2.問題的描述:設(shè)計一個校園模擬導(dǎo)游程序,為新生或來訪的客人通過與機器的“對話“提供最短路徑的信息查詢服務(wù)。 1.任意選取n個場所,構(gòu)成一
3、個無向帶權(quán)圖,圖中頂點表示場所,邊上的權(quán)值表示兩點間的距離,圖的存儲結(jié)構(gòu)可采用帶權(quán)的鄰接矩陣。</p><p> 2.咨詢以用戶和計算機的對話方式進行,由用戶輸入起始點和終點,輸出信息:最短路徑是多少?并指出所經(jīng)過的場所。</p><p> 3、計算并記錄從校門口到各個場所的最短路徑,即求單源點到其它各個場所的最短路徑。</p><p> 4、提供校園中任意場
4、所的問路查詢,即求任意兩點之間的最短路徑。</p><p> 二、數(shù)據(jù)結(jié)構(gòu)的設(shè)計:</p><p> 由于各個場所通過校園中的道路相連,各個場所和連接它們的道路構(gòu)成了整個校園的地理環(huán)境,所以使用圖這種數(shù)據(jù)結(jié)構(gòu)對他們?nèi)ミM行描述。以圖中的頂點表示校園內(nèi)各個場所,應(yīng)包含場所名稱、代號、簡介等信息;以邊表示連接各個場所的道路,應(yīng)包含路徑的長度等信息;頂點和邊均使用結(jié)構(gòu)體定義,整個圖的數(shù)據(jù)結(jié)構(gòu)采
5、用教材中介紹的帶權(quán)的鄰接矩陣方法。</p><p> 二、數(shù)據(jù)結(jié)構(gòu)的設(shè)計:</p><p> typedef struct ArCell</p><p><b> {</b></p><p> int adj; //路徑長度</p><p> }ArCell,AdjMatrix[
6、MAX_VERTEX_NUM][MAX_VERTEX_NUM];</p><p> typedef struct //圖中頂點表示主要景點,存放景點的序號、名稱、介紹等信息,</p><p><b> {</b></p><p> char name[30];</p><p><b> int nu
7、m;</b></p><p> char introduction[100];//簡介</p><p> }infotype;</p><p> typedef struct</p><p><b> {</b></p><p> infotype vexs[MAX_VERT
8、EX_NUM];</p><p> AdjMatrix arcs;</p><p> int vexnum,arcnum;</p><p><b> }MGraph;</b></p><p><b> MGraph b;</b></p><p> void cmd(
9、void)</p><p><b> {</b></p><p><b> int i;</b></p><p> b=InitGraph();</p><p><b> Menu();</b></p><p> scanf("%d&
10、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:Brows
11、er(&b);Menu();break;</p><p> case 2:ShortestPath_DIJ(&b);Menu();break;</p><p> case 3:Floyd(&b);Menu();break;</p><p> case 4:exit(1);break;</p><p> defa
12、ult: printf("輸入序號不存在,請重新輸入");break;</p><p><b> }</b></p><p> scanf("%d",&i);</p><p><b> }</b></p><p> MGraph InitGra
13、ph(void)</p><p><b> {</b></p><p><b> MGraph G;</b></p><p><b> int i,j;</b></p><p> G.vexnum=10;</p><p> G.arcnum=1
14、4;</p><p> for(i=0;i<G.vexnum;i++)</p><p> G.vexs[i].num=i;</p><p> strcpy(G.vexs[0].name,"海南大學(xué)北門");</p><p> strcpy(G.vexs[0].introduction,"高大威武&q
15、uot;);</p><p> strcpy(G.vexs[1].name,"文化柱");</p><p> strcpy(G.vexs[1].introduction,"海大學(xué)子健康成長,激情飛揚的地方");</p><p> strcpy(G.vexs[2].name,"圖書樓");</p&
16、gt;<p> strcpy(G.vexs[2].introduction,"藏書豐富,設(shè)施良好,知識的搖籃");</p><p> strcpy(G.vexs[3].name,"3號教學(xué)樓");</p><p> strcpy(G.vexs[3].introduction,"海大學(xué)子努力學(xué)習(xí),堅持向上的場所 "
17、;);</p><p> strcpy(G.vexs[4].name,"第一田徑場");</p><p> strcpy(G.vexs[4].introduction,"標(biāo)準化跑道,適宜鍛煉身體的場所");</p><p> strcpy(G.vexs[5].name,"男生宿舍樓");</p&
18、gt;<p> strcpy(G.vexs[5].introduction,"房間設(shè)施良好,標(biāo)準六人間");</p><p> strcpy(G.vexs[6].name,"海大餐廳");</p><p> strcpy(G.vexs[6].introduction,"廳內(nèi)衛(wèi)生整潔,環(huán)境宜人");</p&
19、gt;<p> strcpy(G.vexs[7].name,"聯(lián)誼館");</p><p> strcpy(G.vexs[7].introduction,"內(nèi)有乒乓球館,排球館,室內(nèi)籃球館等設(shè)施");</p><p> strcpy(G.vexs[8].name,"女生宿舍樓");</p><
20、;p> strcpy(G.vexs[8].introduction,"房間設(shè)施良好,標(biāo)準六人間");</p><p> strcpy(G.vexs[9].name,"海大東門");</p><p> strcpy(G.vexs[9].introduction,"外有建設(shè)銀行");</p><p>
21、; for(i=0;i<G.vexnum;i++)</p><p> for(j=0;j<G.vexnum;j++)</p><p> G.arcs[i][j].adj=INFINITY;</p><p> G.arcs[0][1].adj=100;</p><p> G.arcs[0][2].adj=80;</p
22、><p> G.arcs[0][6].adj=100;</p><p> G.arcs[1][7].adj=120;</p><p> G.arcs[2][3].adj=50;</p><p> G.arcs[3][6].adj=110;</p><p> G.arcs[3][4].adj=150;</p&
23、gt;<p> G.arcs[4][5].adj=60;</p><p> G.arcs[4][9].adj=280;</p><p> G.arcs[5][9].adj=250;</p><p> G.arcs[6][7].adj=190;</p><p> G.arcs[6][9].adj=180;</p&g
24、t;<p> G.arcs[7][8].adj=130;</p><p> G.arcs[8][9].adj=100;</p><p> for(i=0;i<G.vexnum;i++)</p><p> for(j=0;j<G.vexnum;j++)</p><p> G.arcs[j][i].adj=G.
25、arcs[i][j].adj;</p><p><b> return G;</b></p><p> }//InitGraph end</p><p> 用的是一個switch語句實現(xiàn)輸入不同的序號操作選項,調(diào)用不同的函數(shù)進入不同的操作板塊</p><p> // 迪杰斯特拉算法計,v0為始點</p>
26、;<p> void ShortestPath_DIJ(MGraph * G)</p><p><b> {</b></p><p> int v,w,i,min,t=0,x,flag=1,v0;</p><p> int final[20], D[20], p[20][20];</p><p>
27、 while(flag)</p><p><b> {</b></p><p> printf("請輸入起始點序號:");</p><p> scanf("%d",&v0);</p><p> if(v0<0||v0>G->vexnum)</
28、p><p><b> {</b></p><p> printf("輸入錯誤,景點序號不存在!請再次輸入景點序號:");</p><p> scanf("%d",&v0);</p><p><b> }</b></p><p&g
29、t; if(v0>=0&&v0<G->vexnum)</p><p><b> flag=0;</b></p><p><b> }</b></p><p> for(v=0;v<G->vexnum;v++)</p><p><b>
30、 {</b></p><p> final[v]=0;</p><p> D[v]=G->arcs[v0][v].adj;</p><p> for(w=0;w<G->vexnum;w++)</p><p> p[v][w]=0;</p><p> if(D[v]<INFI
31、NITY)</p><p><b> {</b></p><p> p[v][v0]=1;p[v][v]=1;</p><p><b> }</b></p><p><b> }</b></p><p> D[v0]=0;final[v0]=1
32、;</p><p> for(i=1;i<G->vexnum;i++)</p><p><b> {</b></p><p> min=INFINITY;</p><p> for(w=0;w<G->vexnum;w++)</p><p> if(!final[w
33、])</p><p> if(D[w]<min){v=w;min=D[w];}</p><p> final[v]=1;</p><p> for(w=0;w<G->vexnum;w++)</p><p> if(!final[w]&&(min+G->arcs[v][w].adj<D[w]
34、))</p><p><b> {</b></p><p> D[w]=min+G->arcs[v][w].adj;</p><p> for(x=0;x<G->vexnum;x++) </p><p> p[w][x]=p[v][x];</p><p> p[w][w
35、]=1;</p><p><b> }</b></p><p><b> }</b></p><p> for(v=0;v<G->vexnum;v++)</p><p><b> {</b></p><p> if(v0!=v) p
36、rintf("%s",G->vexs[v0].name);</p><p> for(w=0;w<G->vexnum;w++)</p><p><b> {</b></p><p> if(p[v][w]&&w!=v0) printf("-->%s",G-&
37、gt;vexs[w].name);</p><p><b> t++;</b></p><p><b> }</b></p><p> if(t>G->vexnum-1&&v0!=v)printf(" 總路線長%dm\n\n",D[v]);</p>
38、;<p><b> }</b></p><p> }//ShortestPath_DIJ end</p><p> void Floyd(MGraph *G)</p><p><b> {</b></p><p> int v,u,i,w,k,j,flag=1,p[10][
39、10][10],D[10][10];</p><p> for(v=0;v<G->vexnum;v++)</p><p> for(w=0;w<G->vexnum;w++)</p><p><b> {</b></p><p> D[v][w]=G->arcs[v][w].adj;&
40、lt;/p><p> for(u=0;u<G->vexnum;u++)</p><p> p[v][w][u]=0;</p><p> if(D[v][w]<INFINITY)</p><p><b> {</b></p><p> p[v][w][v]=1;p[v][w]
41、[w]=1;</p><p><b> }</b></p><p><b> }</b></p><p> for(u=0;u<G->vexnum;u++)</p><p> for(v=0;v<G->vexnum;v++)</p><p>
42、 for(w=0;w<G->vexnum;w++)</p><p> if(D[v][u]+D[u][w]<D[v][w])</p><p><b> {</b></p><p> D[v][w]=D[v][u]+D[u][w];</p><p> for(i=0;i<G->vexn
43、um;i++)</p><p> p[v][w][i]=p[v][u][i]||p[u][w][i];</p><p><b> }</b></p><p> while(flag)</p><p><b> {</b></p><p> printf("
44、請輸入始點和終點的序號:");</p><p> scanf("%d%d",&k,&j);</p><p> if(k<0||k>G->vexnum||j<0||j>G->vexnum)</p><p><b> {</b></p><p
45、> printf("景點序號錯誤!請再次輸入始點和終點的序號:");</p><p> scanf("%d%d",&k,&j);</p><p><b> }</b></p><p> if(k>=0&&k<G->vexnum&&am
46、p;j>=0&&j<G->vexnum)</p><p><b> flag=0;</b></p><p><b> }</b></p><p> printf("%s",G->vexs[k].name);</p><p> for
47、(u=0;u<G->vexnum;u++)</p><p> if(p[k][j][u]&&k!=u&&j!=u)</p><p> printf("-->%s",G->vexs[u].name);</p><p> printf("-->%s",G->
48、vexs[j].name);</p><p> printf(" 總路線長%dm\n",D[k][j]);</p><p> }//Floyd end</p><p> int LocateVex(MGraph *G,char* v)</p><p><b> { </b></
49、p><p> int c=-1,i;</p><p> for(i=0;i<G->vexnum;i++)</p><p> if(strcmp(v,G->vexs[i].name)==0)</p><p> {c=i;break;}</p><p><b> return c;<
50、/b></p><p><b> }</b></p><p> MGraph * CreatUDN(MGraph *G)</p><p><b> {</b></p><p> int i,j,k,w;</p><p> char v1[20],v2[20];
51、</p><p> printf("輸入圖的頂點數(shù),弧數(shù):");</p><p> scanf("%d%d",&G->vexnum,&G->arcnum);</p><p> printf("輸入景點的編號:、名稱、介紹:\n");</p><p>
52、 for(i=0;i<G->vexnum;i++)</p><p><b> {</b></p><p> printf("景點序號:");</p><p> scanf("%d",&G->vexs->num);</p><p> prin
53、tf("景點名稱:");</p><p> scanf("%s",G->vexs[i].name);</p><p> printf("景點介紹:");</p><p> scanf("%s",G->vexs->introduction);</p>
54、<p><b> }</b></p><p> for(i=0;i<G->vexnum;i++)</p><p> for(j=0;j<G->vexnum;j++)</p><p> G->arcs[i][j].adj=INFINITY;</p><p> printf(
55、"請輸入路徑長度:\n");</p><p> for(k=0;k<G->arcnum;k++)</p><p><b> {</b></p><p> printf("第%d條邊:\n",k+1);</p><p> printf("景點對(x,y)
56、:");</p><p> scanf("%s",v1);</p><p> scanf("%s",v2);</p><p> printf("路徑長度:");</p><p> scanf("%d",&w);</p>&l
57、t;p> i=LocateVex(G,v1);</p><p> j=LocateVex(G,v2);</p><p> if(i>=0&&j>=0)</p><p><b> {</b></p><p> G->arcs[i][j].adj=w;</p>
58、<p> G->arcs[j][i]=G->arcs[i][j];</p><p><b> }</b></p><p><b> }</b></p><p><b> return G;</b></p><p><b> }</
59、b></p><p> void print(MGraph *G)</p><p><b> {</b></p><p> int v,w,t=0;</p><p> for(v=0;v<G->vexnum;v++)</p><p> for(w=0;w<G-&g
60、t;vexnum;w++)</p><p> { if(G->arcs[v][w].adj==INFINITY)</p><p> printf("∞ ");</p><p> else printf("%-7d",G->arcs[v][w].adj);</p><p>
61、;<b> t++;</b></p><p> if(t%G->vexnum==0)</p><p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p&
62、gt; 旅客進行查詢:1. 查看校園各景點2. 查看所有游覽線路; 3. 選擇始點和終點 4. 退出程序</p><p> 三、功能(函數(shù))設(shè)計:</p><p> 一.本程序從總體上分為四個功能模塊,分別為: (1)查看校園各景點,這一功能主要為來客提供要查的信息。(2) 查看所有游覽線路,這一功能主要提供來客所要到達目的地的所有的線路,方便選擇最短的的路線。(3)選擇始點和終點
63、,這一功能的實現(xiàn)為了找出所走線路中的最短路徑(4). 退出程序</p><p><b> 二,流程圖如下</b></p><p> 程序功能介紹和操作提示模塊</p><p> ?。?)查看所有游覽線路</p><p><b> 帶權(quán)最少的路徑</b></p><p>
64、<b> 選擇始點和終點</b></p><p><b> 四、界面設(shè)計:</b></p><p> 本程序界面本著易于操作簡單整潔而不失美觀的理念,采用數(shù)字對應(yīng)功能選項,結(jié)合詳細的操作提示,使得操作方便快捷,界面清晰明朗。</p><p> 函數(shù)MGraph InitGraph():初始化圖。</p>
65、<p> 函數(shù)void Menu():創(chuàng)建菜單。</p><p> 函數(shù)void Browser(MGraph *G):瀏覽全景。</p><p> 函數(shù)void Search(MGraph *G):查詢某點信息。</p><p> 函數(shù)void Floyd(MGraph *G):查詢?nèi)我鈨牲c之間的最短路徑。</p><p&
66、gt; 函數(shù)void ShortestPath_DIJ(MGraph * G):查詢校門口到其他各點之間的最短路徑</p><p><b> 六、運行與測試:</b></p><p> 1、測試的數(shù)據(jù)及其結(jié)果:</p><p> ?。?)瀏覽各景點選項功能</p><p> ?。?)選擇查看校門口到各個景點的最短路
67、徑</p><p> ?。?)從各個景點中任意選擇兩景點之間的最短距離</p><p> ?。?)查詢完畢,退出程序</p><p> 2、運行與測試期間遇到的問題及其解決辦法。</p><p> 1. 對文件的輸入、輸出打開方式不夠熟悉,導(dǎo)致輸入輸出信息有誤,后參照教材等材料進行修改,使得程序正常進行; </p><
68、p> 2. 刪除函數(shù)中循環(huán)使用不當(dāng),導(dǎo)致運行結(jié)果及寫入文件結(jié)果錯誤,經(jīng)修改后恢復(fù)正常;</p><p> 3. 經(jīng)過反復(fù)修改測試運行,程序功能基本實現(xiàn),基本完成題目要求。 。</p><p><b> 七、設(shè)計后的思考:</b></p><p> 1.首先經(jīng)過這一個星期的緊張而又充實的課程設(shè)計,是我對數(shù)據(jù)結(jié)構(gòu)這一門課程的相關(guān)知識
69、有了全面深刻的認識,尤其是對圖這一數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識掌握的更加全面和牢固,特別是對迪杰斯特拉算法的思想和具體實現(xiàn)更是經(jīng)歷了從不知所云到熟練運用的學(xué)習(xí)過程,同時也全面而又系統(tǒng)的復(fù)習(xí)了C++相關(guān)知識。 2.此次課程設(shè)計最大的收獲可以說是全面掌握了數(shù)據(jù)結(jié)構(gòu)圖的相關(guān)知識。雖說圖這一章也是數(shù)據(jù)結(jié)構(gòu)的終點,但是由于考試只考一些算法的思想,對具體的實現(xiàn)沒有做要求,因此課程設(shè)計之前我對迪杰斯特拉算法可以說是一竅不通,更談不上了解。經(jīng)過幾天的探索和同學(xué)的
70、指點,終于可以運用迪杰斯特拉算法實現(xiàn)對無向網(wǎng)中各頂點間的最小路徑和具體路徑的求解。 3.經(jīng)過此次課程設(shè)計,使我懂得任何一門計算機語言學(xué)習(xí),都是應(yīng)該理論與實際的結(jié)合,光有理論知識是不行的。在以前的學(xué)習(xí)中,我往往知識以備考為目的,只注重對教材理論知識的學(xué)習(xí),不注重實踐,平時很少主動去寫一些代碼,從以前的C語言到C++語言包括現(xiàn)在的數(shù)據(jù)結(jié)構(gòu)都是這樣一個情況。雖然在期末考試中往往有不錯的表現(xiàn),但是真正到要我自己動手去編寫一個程序時,往往都是困難
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++校園導(dǎo)游系統(tǒng)課程設(shè)計
- (校園導(dǎo)游系統(tǒng))c語言
- 校園導(dǎo)游系統(tǒng)課程設(shè)計報告
- 校園導(dǎo)游系統(tǒng)課程設(shè)計報告
- 校園導(dǎo)游咨詢系統(tǒng)課程設(shè)計
- 校園導(dǎo)游課程設(shè)計
- 校園導(dǎo)游系統(tǒng)程序__課程設(shè)計_報告
- 數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu) 校園導(dǎo)游系統(tǒng)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---校園導(dǎo)游系統(tǒng)設(shè)計
- 【課程設(shè)計】c語言課程設(shè)計
- 校園導(dǎo)游咨詢系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(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)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-- 校園導(dǎo)游系統(tǒng)
- 課程設(shè)計報告--校園導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)
評論
0/150
提交評論