版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p> 題 目: 校 園 導(dǎo) 游 系 統(tǒng)</p><p> 院系名稱: 計(jì)算機(jī)學(xué)院</p><p> 專業(yè)名稱: </p><p> 班 級(jí): </p><p> 學(xué)生姓名: </p>
2、<p><b> 學(xué)號(hào)(8位):</b></p><p> 設(shè)計(jì)起止時(shí)間:2011年12月12日~2011年12月16日</p><p><b> 一. 設(shè)計(jì)目的</b></p><p> 熟悉圖的各種存儲(chǔ)結(jié)構(gòu)及其構(gòu)造, 遍歷算法, 掌握各種圖的應(yīng)用算法,如求最短路徑,最佳路徑等。</p>
3、<p><b> 二. 設(shè)計(jì)內(nèi)容</b></p><p> 1、設(shè)計(jì)學(xué)校的校園平面圖</p><p> 【地點(diǎn)(地點(diǎn)名稱、地點(diǎn)介紹),路線(公里數(shù))均不少于10個(gè)】。</p><p> 2、提供圖中任意地點(diǎn)相關(guān)信息的查詢。</p><p> 3、提供圖中任意地點(diǎn)的問路查詢:</p>&
4、lt;p> 1)任意兩個(gè)地點(diǎn)之間的一條最短的簡單路徑(中轉(zhuǎn)次數(shù)最少): </p><p> 2)任意兩個(gè)地點(diǎn)之間的一條最佳訪問路徑(帶權(quán)最短路徑長度):</p><p> 3)任意兩個(gè)地點(diǎn)之間的所有簡單路徑:</p><p> 4,增加新地點(diǎn)和路線,撤銷舊地點(diǎn)和路線。</p><p> 5,基本信息的文件存儲(chǔ)。</p&
5、gt;<p><b> 三.概要設(shè)計(jì)</b></p><p><b> 1.功能模塊設(shè)計(jì)。</b></p><p> 2.各個(gè)模塊詳細(xì)的功能描述。</p><p> 1 錄入地點(diǎn)信息并寫入文件中(Creat());</p><p> 2 校園平面圖(Map()):將校園中各地
6、點(diǎn)的大體位置顯示出來;</p><p> 3 輸出校園的地點(diǎn)名稱(Outputplace()):將校園各個(gè)地點(diǎn)的名稱輸出;</p><p> 4 查詢地點(diǎn)并輸出信息(SearchPlace()):按序號(hào)查詢;</p><p> 5 查詢?nèi)我鈨蓚€(gè)地點(diǎn)之間中轉(zhuǎn)次數(shù)最少的路徑(Reseach()):用廣度優(yōu)先遍歷查詢?nèi)我鈨蓚€(gè)地點(diǎn)之間中轉(zhuǎn)次數(shù)最少的路徑;</p&
7、gt;<p> 6 查詢?nèi)我鈨蓚€(gè)地點(diǎn)之間的最短路徑(shortestPath_Floyd()):用弗洛伊德算法計(jì)算出輸入的任意兩個(gè)地點(diǎn)之間的最短路徑并輸出路徑及其長度;</p><p> 7 查詢?nèi)我鈨蓚€(gè)地點(diǎn)之間的所有路徑(SearchAllPath()):輸入任意兩個(gè)地點(diǎn)的編號(hào),將兩</p><p> 個(gè)地點(diǎn)間的所有路徑顯示出來;</p><p&g
8、t;<b> 四.詳細(xì)設(shè)計(jì)</b></p><p> 1功能函數(shù)的調(diào)用關(guān)系圖; </p><p> 2.各功能函數(shù)的程序流程圖;</p><p><b> 1)圖的創(chuàng)建</b></p><p> LocateVex_M(AdjKatrik * G,char v[ ])</p>
9、<p> CreateDN(AdjKatrik * G)</p><p><b> 查詢</b></p><p> Void SearchPlace(AdjKatrik *G)</p><p><b> 中轉(zhuǎn)次數(shù)最少</b></p><p><b> 帶權(quán)最小的路徑&
10、lt;/b></p><p><b> 兩點(diǎn)間全部路徑</b></p><p> 3.重點(diǎn)設(shè)計(jì)及編碼。</p><p><b> 1)地點(diǎn)查詢</b></p><p> void SearchPlace(AdjKatrik *G)</p><p><b&g
11、t; { </b></p><p> int i,num;</p><p> char choice;</p><p><b> do</b></p><p> { system("cls");</p><p> Outputplace();<
12、;/p><p> printf("請(qǐng)輸入要查找的編號(hào):\n");</p><p> scanf("%d",&num);</p><p><b> i=0;</b></p><p> if(num>0&&num<=G->vexnum)
13、 </p><p><b> {</b></p><p> while(i<=G->vexnum)</p><p><b> {</b></p><p> if(num==i+1)</p><p><b> {</b></p
14、><p> printf("地點(diǎn)編號(hào):%d\n",i+1);</p><p> printf("地點(diǎn)名稱:%s\n",G->vertex[i].name);</p><p> printf("地點(diǎn)簡介:%s\n\n",G->vertex[i].message);</p><
15、p><b> }</b></p><p><b> i++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><
16、;p><b> {</b></p><p> printf("抱歉,查到的地點(diǎn)編號(hào)不存在!");</p><p><b> }</b></p><p> printf("\n\n 還要繼續(xù)查找嗎?(Y/N)");</p><p> flusha
17、ll();</p><p> scanf("%c",&choice);</p><p> }while(choice=='Y'||choice=='y'); </p><p><b> }</b></p><p><b> 2)中轉(zhuǎn)次數(shù)最少&l
18、t;/b></p><p> int NextAdjVertex(AdjKatrik *G,int w,int v)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=w+1;i<G->vexnum;i+
19、+)</p><p><b> {</b></p><p> if(G->arcs[v][i].weight!=INFINITY)</p><p><b> {</b></p><p><b> j=i;</b></p><p> ret
20、urn(j);</p><p><b> }</b></p><p><b> }</b></p><p> return (-1);</p><p><b> }</b></p><p> /*************廣度優(yōu)先遍歷******
21、*******/</p><p> void BFS(AdjKatrik *G,int vi,int vj)</p><p><b> {</b></p><p> int visited[MAX];</p><p> int i,num;</p><p><b> int
22、w;</b></p><p> LinkQueue *Q;</p><p><b> int v;</b></p><p> Q=(LinkQueue*)malloc(sizeof(LinkQueue));</p><p> if(vi==vj)</p><p><b&g
23、t; return;</b></p><p> for(i=0;i<G->vexnum;i++)</p><p> visited[i]=FALSE;</p><p> visited[vi]=TRUE;</p><p> InitQueue(Q);</p><p> EnterQu
24、eue(Q,vi); </p><p> while(Q->front!=Q->rear)</p><p><b> {</b></p><p> DeleteQueue(Q,&v);</p><p><b> num=v;</b></p><p&
25、gt; for(i=0;i<G->vexnum;i++)</p><p><b> {</b></p><p> if(G->arcs[num][i].weight!=INFINITY ||G->arcs[i][num].weight!=INFINITY)</p><p><b> {</b&
26、gt;</p><p> w=i; /*求出當(dāng)前節(jié)點(diǎn)的第一個(gè)鄰接點(diǎn)(求出序號(hào))*/</p><p> while(w!=-1)</p><p><b> {</b></p><p> if(visited[w]==FALSE)</p><p><b> {<
27、/b></p><p> if(w==vj) </p><p><b> {</b></p><p> printf("%s ",G->vertex[num].name);</p><p> BFS(G,vi,num);</p><p><
28、b> return;</b></p><p><b> }</b></p><p> visited[w]=TRUE;</p><p> EnterQueue(Q,w);</p><p><b> }</b></p><p> w=NextAdj
29、Vertex(G,w,v); //W是求的得第一個(gè)鄰接點(diǎn),V是相對(duì)w下一個(gè)鄰接點(diǎn) (求出下一個(gè)鄰接點(diǎn)的序號(hào)) </p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b
30、> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*******************求任意兩個(gè)地點(diǎn)之間中轉(zhuǎn)次數(shù)最少的路徑(廣度遍歷圖)************/</p><p> void Reseach
31、(AdjKatrik *G)</p><p><b> {</b></p><p> int vi,vj; </p><p> printf("請(qǐng)輸入您要查詢的起點(diǎn)編號(hào)和終點(diǎn)編號(hào)(1-13):\n");</p><p> scanf("%d, %d",&vi,&a
32、mp;vj);</p><p><b> vi=vi-1;</b></p><p><b> vj=vj-1;</b></p><p> if(G->arcs[vi][vj].weight!=INFINITY)</p><p> printf("從%s到%s無需中轉(zhuǎn),可直接到
33、達(dá)!\n",G->vertex[vi].name,G->vertex[vj].name);</p><p><b> getch();</b></p><p> if(G->arcs[vi][vj].weight==INFINITY)</p><p><b> {</b></p>
34、;<p> printf("從%s到%s中轉(zhuǎn)次數(shù)最少的路徑為:\n",G->vertex[vi].name,G->vertex[vj].name);</p><p><b> getch();</b></p><p> BFS(G,vi,vj); </p><p><b> }&
35、lt;/b></p><p><b> }</b></p><p><b> 3)最佳路徑</b></p><p> void InitList(SeqList *s)</p><p><b> {</b></p><p> s->
36、last=0;</p><p><b> }</b></p><p> void AddTail(SeqList * s,int i)</p><p><b> {</b></p><p> s->elem[s->last]=i;</p><p> s-
37、>last++;</p><p><b> }</b></p><p> SeqList JoinList(SeqList p,SeqList q)</p><p><b> {</b></p><p><b> int i;</b></p><
38、;p> for(i=1;i<q.last;i++)</p><p><b> {</b></p><p> p.elem[p.last]=q.elem[i];</p><p><b> p.last++;</b></p><p><b> }</b><
39、;/p><p><b> return p;</b></p><p><b> }</b></p><p> void shortestPath_Floyd(AdjKatrik *G)</p><p><b> {</b></p><p> int
40、 i,j,k,vi,vj;</p><p> int dist[MAX][MAX];</p><p> SeqList path[MAX][MAX];</p><p> system("cls");</p><p> printf("請(qǐng)輸入要查詢的兩個(gè)景點(diǎn)的編號(hào)<1-13>:");&
41、lt;/p><p> scanf("%d,%d",&vi,&vj);</p><p> if(vi>G->vexnum||vi<=0||vj>G->vexnum||vj<0)</p><p><b> {</b></p><p> printf(
42、"抱歉,輸入的編號(hào)不存在!,請(qǐng)重新輸入:\n");</p><p> scanf("%d,%d",&vi,&vj);</p><p><b> }</b></p><p><b> else</b></p><p><b>
43、{ </b></p><p> for(i=0; i<G->vexnum; i++)</p><p><b> {</b></p><p> for(j=0; j<G->vexnum; j++)</p><p><b> { </b></p>
44、<p> InitList(&path[i][j]);</p><p> dist[i][j]=G->arcs[i][j].weight;</p><p> if(dist[i][j]<INFINITY)</p><p><b> {</b></p><p> AddTail(&
45、amp;path[i][j],G->vertex[i].num);</p><p> AddTail(&path[i][j],G->vertex[j].num);</p><p><b> }</b></p><p><b> }</b></p><p><b>
46、 }</b></p><p> for(k=0;k<G->vexnum;k++) </p><p> for(i=0;i<G->vexnum ;i++) </p><p> for(j=0;j<G->vexnum ;j++)</p><p> if(dist[i][j]>(dis
47、t[i][k]+dist[k][j])) </p><p><b> {</b></p><p> dist[i][j]=dist[i][k]+dist[k][j];</p><p> path[i][j]=JoinList(path[i][k],path[k][j]);</p><p><b> }&
48、lt;/b></p><p> for(i=0;i<path[vi-1][vj-1].last;i++)</p><p> printf("%d ",path[vi-1][vj-1].elem[i]);</p><p> printf("\n%s與%s兩地之間的距離為:%d米",G->vertex[vi
49、-1].name,G->vertex[vj-1].name,dist[vi-1][vj-1]);</p><p><b> getch();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 4
50、)所有路徑</b></p><p> void printPath(AdjKatrik *G,int path[],int length)</p><p><b> {</b></p><p><b> int i;</b></p><p><b> {</b&g
51、t;</p><p> for(i=0;i<length;i++)</p><p><b> { </b></p><p> printf("%s-->",G->vertex[path[i]].name);</p><p><b> }</b><
52、/p><p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p> int Getweight(AdjKatrik *G,int v1,int v2)//得到兩個(gè)頂點(diǎn)之間路的權(quán)值</p>&l
53、t;p><b> { </b></p><p> if(v1<0||v1>G->vexnum||v2<0||v2>G->vexnum)</p><p><b> {</b></p><p> printf("該地點(diǎn)不存在!");</p>
54、<p><b> return 0;</b></p><p><b> } </b></p><p> return G->arcs[v1][v2].weight;</p><p><b> } </b></p><p> void SearchAl
55、lPath(AdjKatrik *G,int path[],int visited[],int v,int vj,int length)</p><p><b> {</b></p><p><b> int i;</b></p><p> path[length-1]=v;//開始記錄路徑</p>&
56、lt;p> if(v==vj)//若找到終點(diǎn),則打印</p><p><b> {</b></p><p> printPath(G,path,length);</p><p><b> getch();</b></p><p><b> }</b></p
57、><p><b> else</b></p><p><b> {</b></p><p> visited[v]=1;</p><p> for(i=0;i<G->vexnum;i++)</p><p> if(Getweight(G,v,i)!=MAX&
58、amp;&!visited[i])</p><p><b> {</b></p><p> SearchAllPath(G,path,visited,i,vj,length+1);</p><p><b> }</b></p><p> visited[i]=0;</p>
59、<p><b> }</b></p><p><b> }</b></p><p> 五.測試數(shù)據(jù)及運(yùn)行結(jié)果</p><p> 1.正常測試數(shù)據(jù)(3組)及運(yùn)行結(jié)果;</p><p><b> 文件中的信息:</b></p><p>
60、; 【ee.txt】20 12(弧數(shù),地點(diǎn)數(shù))</p><p><b> 【cc.txt】</b></p><p> 0 學(xué)校正門 學(xué)校的標(biāo)志</p><p> 1 行政樓 行政的地方</p><p> 2 噴泉 觀賞的地方</p><p> 3 教學(xué)樓 上課的地方</p>
61、<p> 4 實(shí)驗(yàn)樓 做實(shí)驗(yàn)的地方</p><p> 5 大學(xué)生活動(dòng)中心 娛樂的地方</p><p> 6 圖書館 借書的地方</p><p> 7 體育館 運(yùn)動(dòng)的地方</p><p> 8 籃球場 打籃球的地方</p><p> 9 美食廣場 吃飯的地方</p><p&g
62、t; 10 宿舍 住宿的地方</p><p> 11 旭日院 吃飯的地方</p><p><b> 【c.txt】</b></p><p> 210 20 50 30 32768 32768 120 200 270 300 32768 390 20 32768 32768 32768 32768 32768 32768 320 3276
63、8 32768 500 32768 50 32768 32768 41 65 32768 70 32768 32768 280 32768 32768 30 32768 41 32768 10 32768 32768 32768 32768 32768 32768 32768 32768 32768 65 10 32768 32768 32768 32768 32768 32768 32768 32768 32768 32768 327
64、68 32768 32768 32768 32768 32768 32768 32768 32768 32768 120 32768 70 32768 32768 32768 32768 32768 32768 32768 16 32768 200 320 32768 32768 32768 32768 32768 32768 60 32768 32768 32</p><p> 歡迎進(jìn)入校園導(dǎo)游系統(tǒng)</
65、p><p><b> 輸入1</b></p><p> 按enter鍵返回,再輸入1,返回目錄</p><p><b> 輸入3</b></p><p><b> 輸入y</b></p><p><b> 輸入y</b><
66、;/p><p> 輸入n,再輸入1,返回目錄</p><p><b> 輸入4</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p><b> 輸入4</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p
67、><b> 輸入4</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p><b> 輸入5</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p><b> 輸入5</b></p><p>
68、 按enter鍵,再輸入1,返回目錄</p><p><b> 輸入5</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p><b> 輸入6</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p><b>
69、輸入6</b></p><p> 按enter鍵,再輸入1,返回目錄</p><p><b> 輸入6</b></p><p> 按enter鍵,再輸入2,結(jié)束程序</p><p> 2.非正常測試數(shù)據(jù)(2組)及運(yùn)行結(jié)果。</p><p><b> 無</b&
70、gt;</p><p> 六.調(diào)試情況,設(shè)計(jì)技巧及體會(huì)</p><p> 1.對(duì)自己的設(shè)計(jì)進(jìn)行評(píng)價(jià),指出合理和不足之處,提出改進(jìn)方案;</p><p> 總體來說,這次自己做得并不好,沒有掌握知識(shí),對(duì)數(shù)據(jù)結(jié)構(gòu)和C語言了解不透徹,設(shè)計(jì)的程序比較簡單,功能不是很完整化,基本上完成了老師的要求,但還是存在一些問題,比如,.程序只能一次性的進(jìn)行一次性的地圖數(shù)據(jù)錄入,不
71、能進(jìn)行修改,添加地圖信息。</p><p> 2.對(duì)設(shè)計(jì)及調(diào)試過程的心得體會(huì)。</p><p> 主要是對(duì)課本上的知識(shí)了解不夠熟悉,浪費(fèi)了大量時(shí)間去熟悉課本。對(duì)知識(shí)太過死板,不會(huì)靈活利用。</p><p> 但同時(shí)也更好地理解了廣度優(yōu)先和深度優(yōu)先,剛就到了弗洛伊德算法思想很精辟。</p><p><b> 七.參考文獻(xiàn) &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)報(bào)告
- 校園導(dǎo)游系統(tǒng)程序__課程設(shè)計(jì)_報(bào)告
- 校園導(dǎo)游咨詢系統(tǒng)課程設(shè)計(jì)
- 校園導(dǎo)游系統(tǒng)程序課程設(shè)計(jì)匯本報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-- 校園導(dǎo)游系統(tǒng)
- 課程設(shè)計(jì)報(bào)告--校園導(dǎo)游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 校園導(dǎo)游課程設(shè)計(jì)
- c++校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)
- c語言校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu) 校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園導(dǎo)游系統(tǒng)設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)校園導(dǎo)游咨詢課程設(shè)計(jì)報(bào)告
- 校園導(dǎo)游咨詢系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園交通導(dǎo)游系統(tǒng)
- 校園導(dǎo)游咨詢系統(tǒng)---數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——校園導(dǎo)游咨詢系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-校園導(dǎo)游程序
評(píng)論
0/150
提交評(píng)論