版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 數(shù)據結構課程設計報告</p><p> 題 目: 校 園 導 游 系 統(tǒng)</p><p> 院系名稱: 計算機學院</p><p> 專業(yè)名稱: </p><p> 班 級: </p><p> 學生姓名: </p>
2、<p><b> 學號(8位):</b></p><p> 設計起止時間:2011年12月12日~2011年12月16日</p><p><b> 一. 設計目的</b></p><p> 熟悉圖的各種存儲結構及其構造, 遍歷算法, 掌握各種圖的應用算法,如求最短路徑,最佳路徑等。</p>
3、<p><b> 二. 設計內容</b></p><p> 1、設計學校的校園平面圖</p><p> 【地點(地點名稱、地點介紹),路線(公里數(shù))均不少于10個】。</p><p> 2、提供圖中任意地點相關信息的查詢。</p><p> 3、提供圖中任意地點的問路查詢:</p>&
4、lt;p> 1)任意兩個地點之間的一條最短的簡單路徑(中轉次數(shù)最少): </p><p> 2)任意兩個地點之間的一條最佳訪問路徑(帶權最短路徑長度):</p><p> 3)任意兩個地點之間的所有簡單路徑:</p><p> 4,增加新地點和路線,撤銷舊地點和路線。</p><p> 5,基本信息的文件存儲。</p&
5、gt;<p><b> 三.概要設計</b></p><p><b> 1.功能模塊設計。</b></p><p> 2.各個模塊詳細的功能描述。</p><p> 1 錄入地點信息并寫入文件中(Creat());</p><p> 2 校園平面圖(Map()):將校園中各地
6、點的大體位置顯示出來;</p><p> 3 輸出校園的地點名稱(Outputplace()):將校園各個地點的名稱輸出;</p><p> 4 查詢地點并輸出信息(SearchPlace()):按序號查詢;</p><p> 5 查詢任意兩個地點之間中轉次數(shù)最少的路徑(Reseach()):用廣度優(yōu)先遍歷查詢任意兩個地點之間中轉次數(shù)最少的路徑;</p&
7、gt;<p> 6 查詢任意兩個地點之間的最短路徑(shortestPath_Floyd()):用弗洛伊德算法計算出輸入的任意兩個地點之間的最短路徑并輸出路徑及其長度;</p><p> 7 查詢任意兩個地點之間的所有路徑(SearchAllPath()):輸入任意兩個地點的編號,將兩</p><p> 個地點間的所有路徑顯示出來;</p><p&g
8、t;<b> 四.詳細設計</b></p><p> 1功能函數(shù)的調用關系圖; </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> 中轉次數(shù)最少</b></p><p><b> 帶權最小的路徑&
10、lt;/b></p><p><b> 兩點間全部路徑</b></p><p> 3.重點設計及編碼。</p><p><b> 1)地點查詢</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("請輸入要查找的編號:\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("地點編號:%d\n",i+1);</p><p> printf("地點名稱:%s\n",G->vertex[i].name);</p><p> printf("地點簡介:%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("抱歉,查到的地點編號不存在!");</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)中轉次數(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; /*求出當前節(jié)點的第一個鄰接點(求出序號)*/</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是求的得第一個鄰接點,V是相對w下一個鄰接點 (求出下一個鄰接點的序號) </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> /*******************求任意兩個地點之間中轉次數(shù)最少的路徑(廣度遍歷圖)************/</p><p> void Reseach
31、(AdjKatrik *G)</p><p><b> {</b></p><p> int vi,vj; </p><p> printf("請輸入您要查詢的起點編號和終點編號(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無需中轉,可直接到
33、達!\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中轉次數(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("請輸入要查詢的兩個景點的編號<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、"抱歉,輸入的編號不存在!,請重新輸入:\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)//得到兩個頂點之間路的權值</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("該地點不存在!");</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)//若找到終點,則打印</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ù)據及運行結果</p><p> 1.正常測試數(shù)據(3組)及運行結果;</p><p><b> 文件中的信息:</b></p><p>
60、; 【ee.txt】20 12(弧數(shù),地點數(shù))</p><p><b> 【cc.txt】</b></p><p> 0 學校正門 學校的標志</p><p> 1 行政樓 行政的地方</p><p> 2 噴泉 觀賞的地方</p><p> 3 教學樓 上課的地方</p>
61、<p> 4 實驗樓 做實驗的地方</p><p> 5 大學生活動中心 娛樂的地方</p><p> 6 圖書館 借書的地方</p><p> 7 體育館 運動的地方</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> 歡迎進入校園導游系統(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,結束程序</p><p> 2.非正常測試數(shù)據(2組)及運行結果。</p><p><b> 無</b&
70、gt;</p><p> 六.調試情況,設計技巧及體會</p><p> 1.對自己的設計進行評價,指出合理和不足之處,提出改進方案;</p><p> 總體來說,這次自己做得并不好,沒有掌握知識,對數(shù)據結構和C語言了解不透徹,設計的程序比較簡單,功能不是很完整化,基本上完成了老師的要求,但還是存在一些問題,比如,.程序只能一次性的進行一次性的地圖數(shù)據錄入,不
71、能進行修改,添加地圖信息。</p><p> 2.對設計及調試過程的心得體會。</p><p> 主要是對課本上的知識了解不夠熟悉,浪費了大量時間去熟悉課本。對知識太過死板,不會靈活利用。</p><p> 但同時也更好地理解了廣度優(yōu)先和深度優(yōu)先,剛就到了弗洛伊德算法思想很精辟。</p><p><b> 七.參考文獻 &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園導游系統(tǒng)課程設計報告
- 校園導游系統(tǒng)程序__課程設計_報告
- 校園導游咨詢系統(tǒng)課程設計
- 校園導游系統(tǒng)程序課程設計匯本報告
- 數(shù)據結構課程設計報告--校園導游系統(tǒng)
- 數(shù)據結構課程設計報告-- 校園導游系統(tǒng)
- 課程設計報告--校園導游系統(tǒng)的設計與實現(xiàn)
- 校園導游課程設計
- c++校園導游系統(tǒng)課程設計
- c語言校園導游系統(tǒng)課程設計
- 數(shù)據結構_校園導游系統(tǒng)課程設計
- 數(shù)據結構課程設計---校園導游系統(tǒng)
- 數(shù)據結構 校園導游系統(tǒng)課程設計
- 數(shù)據結構課程設計---校園導游系統(tǒng)設計
- 數(shù)據結構校園導游咨詢課程設計報告
- 校園導游咨詢系統(tǒng)-數(shù)據結構課程設計
- 數(shù)據結構課程設計---校園交通導游系統(tǒng)
- 校園導游咨詢系統(tǒng)---數(shù)據結構課程設計
- 數(shù)據結構課程設計——校園導游咨詢系統(tǒng)
- 數(shù)據結構課程設計報告-校園導游程序
評論
0/150
提交評論