版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 數(shù)據(jù)結構課程設計報告書</p><p> 實驗題目 **市著名景點導游系統(tǒng)</p><p><b> 一、實驗目的</b></p><p> 1.通過本次課程設計鞏固《數(shù)據(jù)結構》課程中的所學內(nèi)容;</p><p> 2.提高自己上機編程以及調(diào)試能力。 </p><p&
2、gt;<b> 二、實驗內(nèi)容</b></p><p> 1.設計家鄉(xiāng)著名景點平面圖,所含景點不少于10個。以圖中頂點表示城市中的各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關信息。 </p><p> 2.為來訪游客提供圖中任意景點相關信息的查詢。 </p><p> 3.為來訪游客提供圖中任意景點的問路查詢,
3、即查詢?nèi)我鈨蓚€景點之間的所有路徑和一條最短的簡單路徑。 </p><p><b> 三、需求分析</b></p><p> 對所開發(fā)系統(tǒng)功能的描述,想要實現(xiàn)的目標,測試數(shù)據(jù)等</p><p> ?。▎栴}提出、功能要求)</p><p> 此系統(tǒng)可以進行韓城市的著名景點平面圖查詢,可以所有任意景點的詳細介紹,可以查
4、詢?nèi)我鈨删包c的所有路徑,最短路徑以及中轉最少的路徑,充當?shù)膶Ш降墓δ?,使得出來此地的人可以方便游覽。</p><p><b> 四、概要設計</b></p><p><b> 1、方案設計</b></p><p> 對系統(tǒng)進行分析,給出景區(qū)圖</p><p> 該系統(tǒng)給出了**市的著名景點查
5、詢系統(tǒng),可以實現(xiàn)任意兩點間的所有路徑和最短路徑查詢,也可以從文件中查詢?nèi)我饩包c的信息。</p><p><b> 2、數(shù)據(jù)結構說明</b></p><p> 程序中定義的數(shù)據(jù)類型——結構體(各個成員的作用)</p><p> typedef struct Arcnode</p><p><b> {&l
6、t;/b></p><p> int top; //景點序號</p><p> char info[Max]; //景點名稱</p><p> char introduce[Max]; //景點介紹</p><p>
7、<b> }data;</b></p><p> typedef struct node</p><p><b> {</b></p><p> int adj; //景點間的距離</p><p><b> }node;</b&g
8、t;</p><p> int visited[Max];</p><p> typedef struct</p><p><b> {</b></p><p> data dingdian[Max]; //景點數(shù)組</p><p> node arcs[Max][
9、Max]; //鄰接矩陣</p><p> int vexnum,arcnum; //圖的頂點數(shù)和邊數(shù)</p><p> }AdjMatrix;</p><p><b> 3、模塊功能說明</b></p><p> 對各個模塊進行功能的描述</p><p&
10、gt; int LocateVex(); 求頂點位置函數(shù)</p><p> void CreateDN(); 創(chuàng)建圖 </p><p> void creatvisited(); 標志是否被訪問過</p><p> void depthfirstsearch(); 深度遍歷</p>&l
11、t;p> void search(); 從任意一個頂點開始訪問遍歷</p><p> void chaxun(); 查詢</p><p> void allways(); 所有路徑</p><p> void zuiduan(); 最短路徑</p><p> void men
12、u(); 主菜單</p><p> 五、詳細設計及運行結果</p><p> 各模塊流程圖, 函數(shù)之間相互調(diào)用的圖示 ,程序設計過程及編碼(不必給出完整程序), 運行結果。</p><p> 1, 功能函數(shù)的調(diào)用關系圖;</p><p> 2, 各功能函數(shù)的數(shù)據(jù)流程圖</p><p><b>
13、; 3重點設計及編碼。</b></p><p> void zuiduan(AdjMatrix *G)</p><p><b> {</b></p><p> int vi,v0;//起始點與終點</p><p> int visit[Max];//訪問標志</p><p>
14、 int path[Max];//記錄當前查找到的最短路徑</p><p> int dist[Max];//當前查找的最短路徑長度</p><p> int i,j,k,t;</p><p><b> int min;</b></p><p> printf("請輸入起始點:\n");&l
15、t;/p><p> scanf("%d",&v0);</p><p> if(v0<0||v0>G->vexnum)</p><p><b> {</b></p><p> printf("the data is error!\n");</p&g
16、t;<p> printf("請重新輸入:\n");</p><p> scanf("%d",&v0);</p><p><b> }</b></p><p><b> //初始化</b></p><p> for(vi=0;v
17、i<G->vexnum;vi++)</p><p><b> {</b></p><p> visit[vi]=0;</p><p> dist[vi]=G->arcs[v0][vi].adj;</p><p> if(dist[vi]>jidazhi)</p><p
18、> path[vi]=v0;</p><p><b> else</b></p><p> path[vi]=-3;</p><p><b> }</b></p><p> //迪杰斯特拉斯算法求任意兩點間的最短路徑</p><p> visit[v0]=1
19、;</p><p> path[v0]=0;</p><p> for(t=1;t<G->vexnum-1;t++)</p><p><b> { </b></p><p> min=jidazhi;</p><p> for(i=0;i<G->vexnum
20、;i++)</p><p> if(!visit[i]&&dist[i]>min)</p><p><b> {</b></p><p><b> k=i;</b></p><p> min=dist[i];</p><p><b>
21、 }</b></p><p> if(min==jidazhi)</p><p><b> return;</b></p><p> visit[k]=1;</p><p> for(j=0;j<G->vexnum;j++)//修正權值</p><p> if(!
22、visit[j]&&G->arcs[k][j].adj!=jidazhi&&(dist[k]+G->arcs[k][j].adj>dist[j]))</p><p><b> {</b></p><p> dist[j]=dist[k]+G->arcs[k][j].adj;</p><p&
23、gt; path[j]=k;</p><p> //AddTail(&path[i],g.vertex[i]);</p><p><b> }</b></p><p><b> }</b></p><p><b> //輸入終點 </b></p>
24、<p> printf("請輸入目的點:\n");</p><p> scanf("%d",&vi);</p><p> if(vi!=v0&&visit[vi])</p><p><b> {</b></p><p> printf
25、("%s",G->dingdian[v0].info);</p><p> Leastpath(G, path, vi, v0);</p><p> printf("-->%s\n\n",G->dingdian[vi].info);</p><p> printf("最短路徑長度:%d\n&q
26、uot;,dist[vi]);</p><p><b> }</b></p><p> printf("按任意鍵返回\n");</p><p><b> getch();</b></p><p> system("cls");</p>&
27、lt;p><b> menu();</b></p><p><b> }</b></p><p> 六、調(diào)試情況,設計技巧及體會(重點)</p><p><b> 1、測試數(shù)據(jù)</b></p><p> 包括合法與非法的測試數(shù)據(jù)、預期結構和實測結果(最好用表格列
28、出)</p><p> 正常測試數(shù)據(jù)(3組)及運行結果;</p><p><b> 1遍歷功能:</b></p><p><b> 2.查詢功能:</b></p><p> 3. 兩點間的最短路徑查詢</p><p> 2.非正常測試數(shù)據(jù)(2組)及運行結果。<
29、/p><p><b> 1.查詢錯誤:</b></p><p><b> 2.遍歷錯誤:</b></p><p> 2,對自己的設計進行評價,指出合理和不足之處,提出改進方案;</p><p> 可設管理員,是管理員并正確輸入密碼才能進行創(chuàng)建和修改,而客戶只能查詢;</p><
30、;p> 2.可選用更好地算法,提升查詢路徑的速度。</p><p> 3.對設計及調(diào)試過程的心得體會。</p><p> 回顧起此課程設計,至今我仍感慨頗多,從理論到實踐,在這段日子里,可以說得是苦多于甜,但是可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是
31、遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。 \</p><p> 七、源程序清單(略,詳見電子版實驗報告)</p><p> #include<stdio.h></p><p> #include<malloc.h></p>&
32、lt;p> #include<string.h></p><p> #include<conio.h></p><p> #include<stdlib.h></p><p> #define Max 200 //最多景點個數(shù)</p><p> #
33、define jidazhi -1 //表示該兩點之間沒有直接路徑</p><p> int LocateVex();</p><p> void CreateDN(); </p><p> void creatvisited();</p><p> void depthfirsts
34、earch();</p><p> void search();</p><p> void chaxun();</p><p> void DFS_path();</p><p> void allways();</p><p> void Leastpath();</p><p>
35、 void zuiduan();</p><p> void menu();</p><p> typedef struct Arcnode</p><p><b> {</b></p><p> int top; //景點序號</p><p&
36、gt; char info[Max]; //景點名稱</p><p> char introduce[Max]; //景點介紹</p><p><b> }data;</b></p><p> typedef struct node</p><p&g
37、t;<b> {</b></p><p> int adj; //景點間的距離</p><p><b> }node;</b></p><p> int visited[Max];</p><p> typedef struct</p>
38、;<p><b> {</b></p><p> data dingdian[Max]; //景點數(shù)組</p><p> node arcs[Max][Max]; //鄰接矩陣</p><p> int vexnum,arcnum; //圖的頂點數(shù)和邊數(shù)</
39、p><p> }AdjMatrix;</p><p><b> /*</b></p><p> int LocateVex(AdjMatrix *G,int v)</p><p> { //求頂點位置函數(shù)</p>
40、;<p> int j=0,k;</p><p> for(k=0;k<G->vexnum;k++)</p><p> if(G->dingdian[k].top==v)</p><p><b> {</b></p><p><b> j=k;</b><
41、;/p><p><b> break;</b></p><p><b> }</b></p><p> return(j);</p><p><b> }</b></p><p><b> */</b></p>
42、<p> void CreateDN(AdjMatrix *G) //創(chuàng)建一個無向網(wǎng)</p><p><b> {</b></p><p><b> int i,j;</b></p><p><b> FILE *fp;</b>&l
43、t;/p><p> fp=fopen("導游.txt","rt");</p><p> G->vexnum=10;</p><p> G->arcnum=18;</p><p><b> if(fp)</b></p><p><b>
44、; {</b></p><p> for(i=0;i<G->vexnum;i++)</p><p> fscanf(fp,"%d\t%s\t%s",&G->dingdian[i].top,G->dingdian[i].info,G->dingdian[i].introduce);</p><p&
45、gt;<b> }</b></p><p> for(i=0;i<G->vexnum;i++)</p><p> for(j=0;j<G->vexnum;j++)</p><p><b> {</b></p><p> fscanf(fp,"%d"
46、;,&G->arcs[i][j].adj);</p><p><b> }</b></p><p> fclose(fp);</p><p><b> }</b></p><p> void creatvisited(AdjMatrix *G)</p><p
47、><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<G->vexnum;i++)</p><p> visited[i]=0;</p><p><b> }</b></p>&l
48、t;p> void depthfirstsearch(AdjMatrix *G,int v)</p><p><b> {</b></p><p><b> int k;</b></p><p> visited[v]=1;</p><p> printf("景點序號:%d
49、 名稱:%s\n景點信息:%s\n\n",G->dingdian[v].top,G->dingdian[v].info,G->dingdian[v].introduce);</p><p> for(k=0;k<G->vexnum;k++)</p><p><b> {</b></p><p> i
50、f(!visited[k] && G->arcs[v][k].adj!=jidazhi)</p><p> depthfirstsearch(G,k);</p><p><b> }</b></p><p><b> }</b></p><p> void search
51、(AdjMatrix *G)</p><p><b> {</b></p><p><b> int i,n;</b></p><p> system("cls");</p><p> creatvisited(G);</p><p> for(
52、i=0;i<G->vexnum;i++)</p><p> printf("\n\t%d\t%s\n",G->dingdian[i].top,G->dingdian[i].info);</p><p> printf("請輸入遍歷的起點序號:\n");</p><p> scanf("%
53、d",&n);</p><p> if(n<0 || n>9)</p><p><b> {</b></p><p> printf("遍歷錯誤,請繼續(xù)!\n");</p><p><b> exit(1);</b></p>&
54、lt;p><b> }</b></p><p> depthfirstsearch(G,n);</p><p> printf("按任意鍵返回\n");</p><p><b> getch();</b></p><p> system("cls&quo
55、t;);</p><p><b> menu();</b></p><p><b> }</b></p><p> void chaxun(AdjMatrix *G)</p><p><b> {</b></p><p><b> i
56、nt i,n;</b></p><p> system("cls");</p><p> printf("請輸入要查詢的景點序號(0-9):\n");</p><p> scanf("%d",&n);</p><p> if(n<0 || n>
57、9)</p><p> printf("查詢錯誤,請繼續(xù)!\n");</p><p><b> else</b></p><p><b> {</b></p><p> for(i=0;i<G->vexnum;i++)</p><p>
58、<b> {</b></p><p> if(G->dingdian[i].top==n)</p><p><b> {</b></p><p> printf("查詢到的信息為:\n\n");</p><p> printf("\t\t景點序號:%d\
59、n\t\t景點名稱:%s\n\t\t景點介紹:%s\n",G->dingdian[i].top,G->dingdian[i].info,G->dingdian[i].introduce);</p><p><b> }</b></p><p><b> }</b></p><p><b
60、> }</b></p><p> printf("\n\t按任意鍵返回\n");</p><p><b> getch();</b></p><p> system("cls");</p><p><b> menu();</b>&
61、lt;/p><p><b> }</b></p><p> int path[Max];</p><p> int visit[Max];</p><p> int top=0;</p><p> void DFS_path(AdjMatrix *G,int num1,int num2)&l
62、t;/p><p><b> {</b></p><p> int i,j,count=0;</p><p><b> top++;</b></p><p> path[top]=num1;</p><p> visit[num1]=1;</p><p
63、> if(num1==num2)</p><p><b> {</b></p><p> for(i=0;i<=top-1;i++)</p><p><b> {</b></p><p> printf("%s->",G->dingdian[p
64、ath[i]].info);</p><p><b> count++;</b></p><p><b> }</b></p><p> printf("%s",G->dingdian[path[top]].info);</p><p> printf("
65、(共中轉%d次)\n",count);</p><p> printf("\n");</p><p> visit[num1]=0;</p><p><b> top--;</b></p><p><b> return;</b></p><
66、p><b> }</b></p><p> for(j=0;j<G->vexnum;j++)</p><p><b> {</b></p><p> if(G->arcs[num1][j].adj > jidazhi && !visit[j])</p>&
67、lt;p> DFS_path(G,j,num2);</p><p><b> }</b></p><p> visit[num1]=0;</p><p><b> top--;</b></p><p><b> }</b></p><p>
68、; void allways(AdjMatrix *G) //找出從u到v的所有路徑</p><p><b> {</b></p><p> int i,num1,num2;</p><p> printf("輸入起始和終點(num1,num2):\n");</p><p> sc
69、anf("%d,%d",&num1,&num2);</p><p><b> top=-1;</b></p><p> for(i=0;i<Max;i++)</p><p> visit[i]=0;</p><p> DFS_path(G,num1,num2);</
70、p><p> printf("按任意鍵返回\n");</p><p><b> getch();</b></p><p> system("cls");</p><p><b> menu();</b></p><p><b&
71、gt; }</b></p><p> //深度優(yōu)先找出從頂點v0到頂點Vi的所有路徑</p><p> void Leastpath(AdjMatrix *G,int path[],int vi,int v0)</p><p><b> {</b></p><p><b> int k;&
72、lt;/b></p><p> k = path[vi];</p><p> if(k == v0)</p><p><b> return;</b></p><p> Leastpath(G,path,k,v0);</p><p> printf("——>%s &
73、quot;,G->dingdian[k].info);</p><p><b> }</b></p><p> void zuiduan(AdjMatrix *G)</p><p><b> {</b></p><p> int vi,v0;//起始點與終點</p>&l
74、t;p> int visit[Max];//訪問標志</p><p> int path[Max];//記錄當前查找到的最短路徑</p><p> int dist[Max];//當前查找的最短路徑長度</p><p> int i,j,k,t;</p><p><b> int min;</b><
75、/p><p> printf("請輸入起始點:\n");</p><p> scanf("%d",&v0);</p><p> if(v0<0||v0>G->vexnum)</p><p><b> {</b></p><p>
76、 printf("the data is error!\n");</p><p> printf("請重新輸入:\n");</p><p> scanf("%d",&v0);</p><p><b> }</b></p><p><b>
77、; //初始化</b></p><p> for(vi=0;vi<G->vexnum;vi++)</p><p><b> {</b></p><p> visit[vi]=0;</p><p> dist[vi]=G->arcs[v0][vi].adj;</p>
78、<p> if(dist[vi]>jidazhi)</p><p> path[vi]=v0;</p><p><b> else</b></p><p> path[vi]=-3;</p><p><b> }</b></p><p> //弗洛
79、伊德算法求任意兩點間的最短路徑</p><p> visit[v0]=1;</p><p> path[v0]=0;</p><p> for(t=1;t<=G->vexnum-1;t++)</p><p><b> { </b></p><p> min=jidazh
80、i;</p><p> for(i=0;i<G->vexnum;i++)</p><p> if(!visit[i]&&dist[i]>min)</p><p><b> {</b></p><p><b> k=i;</b></p><
81、p> min=dist[i];</p><p><b> }</b></p><p> if(min==jidazhi)</p><p><b> return;</b></p><p> visit[k]=1;</p><p> for(j=0;j<
82、G->vexnum;j++)//修正權值=</p><p> if(!visit[j]&&G->arcs[k][j].adj!=jidazhi&&(dist[k]+G->arcs[k][j].adj>dist[j]))</p><p><b> {</b></p><p> dist
83、[j]=dist[k]+G->arcs[k][j].adj;</p><p> path[j]=k;</p><p> //AddTail(&path[i],g.vertex[i]);</p><p><b> }</b></p><p><b> }</b></p&g
84、t;<p><b> //輸入終點 </b></p><p> printf("請輸入目的點:\n");</p><p> scanf("%d",&vi);</p><p> if(vi!=v0&&visit[vi])</p><p>
85、<b> {</b></p><p> printf("%s",G->dingdian[v0].info);</p><p> Leastpath(G, path, vi, v0);</p><p> printf("-->%s\n\n",G->dingdian[vi].info
86、);</p><p> printf("最短路徑長度:%d\n",dist[vi]);</p><p><b> }</b></p><p> printf("按任意鍵返回\n");</p><p><b> getch();</b></p>
87、;<p> system("cls");</p><p><b> menu();</b></p><p><b> }</b></p><p> void grap(AdjMatrix *G)</p><p><b> {</b>&
88、lt;/p><p> printf("\n\n\t");</p><p> printf("禹甸園\n");</p><p> printf(" // \\\\\n //\t\t \\\\\n //\t\t \\\\\n");</p><
89、;p> printf(" // 司馬遷祠");</p><p> printf("\n //\t\t \\\\\n //\t\t \\\\\n //\t\t 太史園");</p><p> printf("=======金塔公園");</p>&l
90、t;p> printf("\n 黨家村\t\t \\\\");</p><p> printf("\n \\\\\t\t \\\\\n \\\\\t\t\t司馬遷圖書館");</p><p> printf("\n 梁代村");</p><p>
91、; printf("\n\t\\\\\n\t \\\\\n\t \\\\====楨州公園");</p><p> printf("\n\t\t\t\\\\\n\t\t\t ====文廟\n\t\t\t \\\\\n\t\t\t 毓秀橋");</p><p> printf("\n按任意鍵返回");</p
92、><p><b> getch();</b></p><p> system("cls");</p><p><b> menu();</b></p><p><b> }</b></p><p> void menu()<
93、;/p><p><b> {</b></p><p><b> int n;</b></p><p> AdjMatrix *G;</p><p> G=(AdjMatrix *)malloc(sizeof(AdjMatrix));</p><p> CreateDN(
94、G);</p><p><b> while(1)</b></p><p><b> {</b></p><p> printf("\n\n\n");</p><p> printf("\t\t\t歡迎使用韓城市旅游景點查詢系統(tǒng)\n\n");</
95、p><p> printf("\t\t\t 1:遍歷景點信息 \n");</p><p> printf("\t\t\t 2:查詢景點信息 \n");</p><p> printf("\t\t\t 3:任意兩點
96、間的所有路徑 \n");</p><p> printf("\t\t\t 4:任意兩點間的最短路徑查詢 \n"); </p><p> printf("\t\t\t 5:顯示地圖 \n");</p><p>
97、 printf("\t\t\t 0:退出查詢系統(tǒng) \n");</p><p> printf("\n");</p><p> printf("請選擇0-5\n");</p><p> scanf("%d",&n);</p
98、><p><b> switch(n)</b></p><p><b> {</b></p><p> case 1:search(G);</p><p><b> break;</b></p><p> case 2:chaxun(G);<
99、;/p><p><b> break;</b></p><p><b> case 3:</b></p><p> allways(G);</p><p><b> break;</b></p><p> case 4:zuiduan(G);&l
100、t;/p><p><b> break;</b></p><p> case 5:grap(G);</p><p><b> break;</b></p><p><b> case 0:</b></p><p><b> exit(0
101、);</b></p><p><b> }</b></p><p> //system("cls");</p><p> //printf("按任意鍵繼續(xù)\n");</p><p><b> getch();</b></p&
102、gt;<p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> menu();</b></p><
溫馨提示
- 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ù)結構課程設計報告-全國著名景點導游咨詢01
- 數(shù)據(jù)結構 連云港景點導游咨詢 課程設計
- 數(shù)據(jù)結構_校園導游系統(tǒng)課程設計
- 數(shù)據(jù)結構課程設計---校園導游系統(tǒng)
- 數(shù)據(jù)結構 校園導游系統(tǒng)課程設計
- 湖北著名景點的導游詞
- 甘肅的著名景點導游詞
- 甘肅著名景點的導游詞
- 甘肅著名景點的導游詞
- 湖北著名景點的導游詞
- 湖南著名景點的導游詞
- 浙江著名景點的導游詞
- 浙江著名景點的導游詞
- 湖南著名景點的導游詞
- 甘肅的著名景點導游詞
- 數(shù)據(jù)結構課程設計---校園導游系統(tǒng)設計
- 浙江著名景點導游詞5篇
- 校園導游咨詢系統(tǒng)-數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計報告-學校導游系統(tǒng)
- 數(shù)據(jù)結構課程設計---校園交通導游系統(tǒng)
評論
0/150
提交評論