2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  數(shù) 據(jù) 結(jié) 構(gòu)</b></p><p>  課 程 設(shè) 計(jì) 說(shuō) 明 書(shū)</p><p><b>  一.設(shè)計(jì)目的:</b></p><p>  《數(shù)據(jù)結(jié)構(gòu)》課程主要介紹最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計(jì)算機(jī)中的存儲(chǔ)表示,以及在其上進(jìn)行各種運(yùn)算時(shí)的實(shí)現(xiàn)算法,并對(duì)算法的效

2、率進(jìn)行簡(jiǎn)單的分析和討論。進(jìn)行數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)要達(dá)到以下目的:</p><p>  1)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;</p><p>  2)初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;</p><p>  3)提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;</p><

3、p>  4)訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。</p><p>  本系統(tǒng)為用戶提供以下功能:</p><p>  (一)、查詢了解學(xué)校概況,為導(dǎo)游參觀者提供關(guān)于學(xué)校的相關(guān)信息。</p><p>  (二)、查詢校園各個(gè)場(chǎng)所和景點(diǎn)信息;</p><p>  (三)、為導(dǎo)游者或外

4、來(lái)人員參觀人員提供校園交通信息,方便用戶走訪學(xué)校。</p><p>  校園導(dǎo)航查詢系統(tǒng)的開(kāi)發(fā)方法總結(jié)如下:</p><p>  (1) 調(diào)查,了解學(xué)校各個(gè)場(chǎng)所與 場(chǎng)所或者是各個(gè)景點(diǎn)與景點(diǎn)之間的信息,路徑和距離,從外來(lái)人員或者參觀者和走訪者的角度出發(fā),該如何設(shè)計(jì)才能滿足用戶需求。</p><p>  (2) 分析,對(duì)調(diào)查得到的數(shù)據(jù)進(jìn)行分析,根據(jù)其要求實(shí)現(xiàn)的功能分析系

5、統(tǒng)結(jié)構(gòu)和界面將實(shí)現(xiàn)的基本功能。</p><p>  (3) 設(shè)計(jì)與開(kāi)發(fā),設(shè)計(jì)系統(tǒng)界面并編輯實(shí)現(xiàn)其各個(gè)功能的代碼。</p><p>  (4) 調(diào)試,在設(shè)計(jì)完成后,調(diào)試系統(tǒng)運(yùn)行的狀況,修改完善系統(tǒng),然后進(jìn)行測(cè)試。</p><p><b>  二.涉及內(nèi)容和要求</b></p><p><b>  設(shè)計(jì)內(nèi)容:<

6、;/b></p><p> ?。?)設(shè)計(jì)學(xué)校的平面圖(至少包括10個(gè)以上的場(chǎng)所)。每?jī)蓚€(gè)場(chǎng)所間可以有不同的路,且路長(zhǎng)也可能不同;</p><p>  (2)提供起始點(diǎn)與終點(diǎn)能自動(dòng)找出從任意場(chǎng)所到達(dá)另一場(chǎng)所的最佳路徑(最短路徑)。</p><p><b>  設(shè)計(jì)要求:</b></p><p>  (1) 符合課題要

7、求,實(shí)現(xiàn)相應(yīng)功能;</p><p>  (2) 要求界面友好美觀,操作方便易行;</p><p>  (3) 注意程序的實(shí)用性、安全性;</p><p>  三.本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)</p><p>  校園旅游模型是由各個(gè)景點(diǎn)和景點(diǎn)以及場(chǎng)所和場(chǎng)所之間的路徑組成的,所以這完全可以用數(shù)據(jù)結(jié)構(gòu)中的圖來(lái)模擬。用圖的結(jié)點(diǎn)代表景點(diǎn)或場(chǎng)所,用圖的邊代表

8、景點(diǎn)或場(chǎng)所之間的路徑。所以首先應(yīng)創(chuàng)建圖的存儲(chǔ)結(jié)構(gòu)。結(jié)點(diǎn)值代表景點(diǎn)信息,邊的權(quán)值代表景點(diǎn)間的距離。結(jié)點(diǎn)值及邊的權(quán)值采用圖存儲(chǔ)。本系統(tǒng)需要查詢景點(diǎn)信息和求一個(gè)景點(diǎn)到另一個(gè)景點(diǎn)的最短路徑長(zhǎng)度及路線,為方便操作,所以給每個(gè)景點(diǎn)一個(gè)代碼,用結(jié)構(gòu)體類型實(shí)現(xiàn)。計(jì)算路徑長(zhǎng)度,最短路線和最佳路徑時(shí)可用迪杰斯特拉(Dijkastra)算法實(shí)現(xiàn)。最后用switch選擇語(yǔ)句選擇執(zhí)行瀏覽景點(diǎn)信息或查詢最短路徑和距離。</p><p>  

9、圖的存儲(chǔ)結(jié)構(gòu)常用的有4種,分別是數(shù)組表示法,鄰接表,十字鏈表,鄰接多重表。在此程序中運(yùn)用的是數(shù)組表示法:</p><p>  網(wǎng)的鄰接矩陣:A[i][j]= wi,j 若<vi,vj>或(vi,vj)∈VR</p><p>  ∞ 反之</p><p>  #define INFINITY INT_MAX

10、//最大值無(wú)窮大</p><p>  #define MAX_VERTEX_NUM 20 //最大頂點(diǎn)個(gè)數(shù)</p><p>  typedef enum{DG,DN,AG,AN} GraphKind; //有向圖,有向網(wǎng),無(wú)向圖,無(wú)向網(wǎng)</p><p>  typedef struct ArcCell{</p><p> 

11、 VRType adj; </p><p>  InfoType *info; //該弧相關(guān)信息的指針</p><p>  }ArcCell,AdjMatrix[max_vertex_num][max_vertex_num];</p><p>  tpyedef struct{</p><p>  VertexType vexs[MAX_VE

12、RTEX_NUM]; //頂點(diǎn)向量</p><p>  AdjMatrix arcs; //鄰接矩陣</p><p>  int vexnum,arcnum; //圖的當(dāng)前頂點(diǎn)數(shù)和弧數(shù)</p><p>  GraphKind kind; //圖的種類標(biāo)志</p><p><b>  }MGraph;</b></

13、p><p>  創(chuàng)建一個(gè)二維數(shù)組用來(lái)存儲(chǔ)兩個(gè)地點(diǎn)的距離,數(shù)組兩個(gè)下標(biāo)分別代表兩個(gè)地點(diǎn)的位置(起點(diǎn)與終點(diǎn)),若兩個(gè)地點(diǎn)之間沒(méi)有路線可走則用無(wú)窮大表示兩點(diǎn)之間沒(méi)有路,依據(jù)此條件完成初始化平面矩陣。</p><p><b>  例子:</b></p><p>  Edge[0][0].value=0 , Edge[0][1].value=

14、25 , Edge[0][2].value=25 ; </p><p>  Edge[0][3].value=90, Edge[0][4].value=uplimit, Edge[0][5].value=uplimit ;</p><p>  Edge[0][6].value=10 , Edge[0][7].value=uplimit , Ed

15、ge[0][8].value=uplimit;</p><p>  Edge[0][9].value=uplimit, Edge[0][10].value=uplimit;</p><p><b>  2.</b></p><p>  迪杰斯特拉(Dijkstra)算法思想:</p><p>  按路徑長(zhǎng)度遞增的

16、次序產(chǎn)生最短路徑.</p><p>  算法的一級(jí)實(shí)現(xiàn):輔助數(shù)組D[0..n-1]</p><p><b>  D[i]:</b></p><p>  表示當(dāng)前所找到的從始點(diǎn)v到終點(diǎn)vi的最短路徑的長(zhǎng)度.</p><p>  算法的二級(jí)實(shí)現(xiàn): (用鄰接矩陣arcs來(lái)存儲(chǔ)有向圖)</p><p> 

17、 (1) S:表示已找到從v出發(fā)的最短路徑的終點(diǎn)的集合;</p><p>  D[i]:表示當(dāng)前所找到的從v到終點(diǎn)vi的最短路徑的長(zhǎng)度.</p><p>  S={v}; D[i]=arcs[Locate-vex(G,v)][i] vi∈V</p><p>  (2)選擇vj, 使得</p><p>  D[j]=min

18、{D[i]| vi∈V-S}</p><p>  令 S=S∪{j}</p><p>  (3)修改從v出發(fā)到集合V-S上任頂點(diǎn)Vk可達(dá)的最短路徑長(zhǎng)度.</p><p>  if D[j]+arcs[j,k]<D[k]</p><p>  D[k]=D[j]+arcs[j][k]</p><p>  (4

19、)重復(fù)(2)、(3)共n-1次;</p><p>  即可求得從v到圖上其余各頂點(diǎn)的最短路徑.</p><p>  以下為迪杰斯特拉算法</p><p>  void ShortestDist(int s){ </p><p>  for ( int i=0;i<11;i++){ //dist和p

20、ath數(shù)組初始化 </p><p>  dist[i].value=Edge[s][i].value; //鄰接矩陣第s行元素賦值到dist中 </p><p>  S[i].value=0; //已求出最短路徑的頂點(diǎn)集合初始化 </p><p>  if(i!=s && dist[i].va

21、lue<uplimit){ </p><p>  path[i].value=s; </p><p><b>  } </b></p><p>  else path[i].value=-1; //路徑存放數(shù)組初始化</p><p><b>

22、  } </b></p><p>  S[s].value=1; //頂點(diǎn)s加入頂點(diǎn)集合</p><p>  dist[s].value=0; </p>&

23、lt;p>  /* 循環(huán)計(jì)算該場(chǎng)所與鄰接場(chǎng)所之間的最短距離 */ </p><p>  for (i=0;i<11-1;i++){ //從頂點(diǎn)s確定n-1條路徑 </p><p>  float min=uplimit; </p><p>  int u=s; </p>&

24、lt;p>  for (int j=0;j<11;j++){ //選擇當(dāng)前不在集合S中具有最短路徑的頂點(diǎn)u </p><p>  /* 如果有路徑比目前的最小值還小,則替換這個(gè)最小值 */ </p><p>  if (!S[j].value && dist[j].value<min){ </p

25、><p><b>  u=j; </b></p><p>  min=dist[j].value; </p><p><b>  }</b></p><p><b>  } </b></p><p>  S[u].value=1;

26、 //將頂點(diǎn)u加入集合S,表示它已在最短路徑上 </p><p>  for (int w=0;w<11;w++){ //修改 </p><p>  if (!S[w].value && Edge[u][w].value<uplimit && dis

27、t[u].value+Edge[u][w].value<dist[w].value){ </p><p>  dist[w].value=dist[u].value+Edge[u][w].value; </p><p>  path[w].value=u; </p><p>  3.用switch語(yǔ)句,分支case語(yǔ)句出現(xiàn)友好界面,提示相關(guān)的輸入信息,

28、為用戶的使用提供方便的輸入信息,例如:</p><p><b>  switch(c)</b></p><p><b>  {</b></p><p>  case 0: printf("女生公寓");break;</p><p>  case 1: printf( "

29、圖書(shū)館");break;</p><p>  case 2: printf( "體育館");break;</p><p>  case 3: printf( "一道門(mén)");break;</p><p>  case 4: printf( "一教學(xué)樓");break;</p><

30、p>  case 5: printf( "男生公寓");break;</p><p>  case 6: printf( "食堂");break;</p><p>  case 7: printf( "體育場(chǎng)");break;</p><p>  case 8: printf( "五道門(mén)&q

31、uot;);break;</p><p>  case 9: printf( "十號(hào)教學(xué)樓");break;</p><p>  case 10:printf("實(shí)驗(yàn)樓");break;</p><p>  四、功能模塊詳細(xì)設(shè)計(jì)</p><p>  (一)設(shè)計(jì)功能的實(shí)現(xiàn)</p><p

32、>  接下來(lái)根據(jù)以上搭建的程序框架完成各個(gè)模塊的算法</p><p>  首先是抽象數(shù)據(jù)類型的定義:</p><p>  圖的抽象數(shù)據(jù)類型的 定義:</p><p>  ADT Mgragh{</p><p>  數(shù)據(jù)對(duì)象V: V是具有相同特征的數(shù)據(jù)元素的 集合,稱為定點(diǎn)集</p><p>  數(shù)據(jù)關(guān)系R

33、={VR}</p><p>  VR={ <V,W> | V, W∈V, <V , W>表示從V到W的邊 </p><p><b>  }</b></p><p><b>  2、 基本操作:</b></p><p>  CreateUDN(&G,V,VR);

34、// 創(chuàng)建圖</p><p>  初始條件:V是圖的頂點(diǎn)集,VR是圖中邊的 集合。</p><p>  操作結(jié)果:按V和VR的定義構(gòu)造圖 G。</p><p> ?。ǘ┲饕惴ㄔO(shè)計(jì)及相關(guān)算法補(bǔ)充</p><p>  先創(chuàng)建圖存儲(chǔ)學(xué)校各個(gè)景點(diǎn)或場(chǎng)所,以圖的頂點(diǎn)表示景點(diǎn)或場(chǎng)所,以邊表示路徑,再利用迪杰斯特拉(DijkStra)算法求出校園各個(gè)地

35、方的最短路徑,然后根據(jù)需要進(jìn)行補(bǔ)充相關(guān)算法。</p><p>  void BuildMap() 生成地圖,輸入地圖的基本信息</p><p>  void ShortestDist(int s) 找出場(chǎng)所間的最短距離</p><p>  void bh() 顯示場(chǎng)所名稱</p><p>  void Outpath(int c) 將

36、頂點(diǎn)序列號(hào)轉(zhuǎn)換成場(chǎng)所名稱 </p><p>  void getdata(int s,int e) 輸出兩個(gè)場(chǎng)所之間的最短距離,和最短路徑</p><p>  void info(int c) c為場(chǎng)所對(duì)應(yīng)的數(shù)字號(hào),輸出場(chǎng)所的具體信息,方便用戶的信息獲取</p><p>  void num()用于顯示校園導(dǎo)航系統(tǒng)的界面顯示,輸出

37、10個(gè)地點(diǎn)的名稱</p><p>  void main()在主程序中運(yùn)用switch語(yǔ)句分別調(diào)用不同的子函數(shù)完成相應(yīng)的操作</p><p>  程序的具體操作流程:</p><p>  打開(kāi)導(dǎo)航,在屏幕上顯示出學(xué)校各個(gè)景點(diǎn)場(chǎng)所;</p><p>  進(jìn)入主菜單,用switch語(yǔ)句選擇相應(yīng)的數(shù)字,查找學(xué)校簡(jiǎn)介,路線和個(gè)景點(diǎn)與場(chǎng)所之間的距離&

38、lt;/p><p>  進(jìn)入子菜單,選擇相應(yīng)的數(shù)字,查詢了解景點(diǎn)與場(chǎng)所信息及景點(diǎn)與場(chǎng)所的最短距離</p><p><b>  退出導(dǎo)航系統(tǒng)</b></p><p><b>  源程序:</b></p><p>  #include <stdio.h></p><p>

39、  #include <iostream.h></p><p>  #include <malloc.h></p><p>  #include <conio.h></p><p>  #include <stdlib.h></p><p>  #define Num 11

40、 //最多頂點(diǎn)個(gè)數(shù) </p><p>  #define uplimit 100000 //定義一個(gè)無(wú)窮大的值 </p><p>  struct intt{</p><p>  int value;</p><p><b>  

41、};</b></p><p>  intt Edge[Num][Num]; //Edge為帶權(quán)鄰接矩陣 </p><p>  intt dist[Num]; //dist為最短路程 </p><p>  

42、intt path[Num]; //path為最短路徑上該頂點(diǎn)的前一頂點(diǎn)的頂點(diǎn)號(hào) </p><p>  intt S[Num]; //S為已求得的在最短路徑上的頂點(diǎn)號(hào) </p><p>  intt D[Num];

43、 //D為輸出最短距離時(shí)的輔助數(shù)組</p><p><b>  /** </b></p><p>  * 生成地圖,輸入地圖的基本信息 </p><p><b>  * </b></p><p><b>  **/ </b><

44、;/p><p>  void BuildMap(){ </p><p>  int i,j; </p><p>  /* 初始化平面圖矩陣 */ </p><p>  for ( i=0;i<11;i++){ </p><p>  for ( j=0;j<11;j++

45、){ </p><p>  Edge[0][0].value=0 , Edge[0][1].value=25 , Edge[0][2].value=25 ; </p><p>  Edge[0][3].value=90, Edge[0][4].value=uplimit, Edge[0][5].value=uplimit ;</p&g

46、t;<p>  Edge[0][6].value=10 , Edge[0][7].value=uplimit , Edge[0][8].value=uplimit;</p><p>  Edge[0][9].value=uplimit, Edge[0][10].value=uplimit;</p><p>  Edge[1][0].value=25 ,

47、 Edge[1][1].value=0 , Edge[1][2].value=10 ; </p><p>  Edge[1][3].value=32, Edge[1][4].value=uplimit, Edge[1][5].value=uplimit ;</p><p>  Edge[1][6].value=10 , Edge

48、[1][7].value=uplimit , Edge[1][8].value=21;</p><p>  Edge[1][9].value=16, Edge[1][10].value=uplimit;</p><p>  Edge[2][0].value=25 , Edge[2][1].value=10 , Edge[2][2].value=0

49、 ; </p><p>  Edge[2][3].value=uplimit, Edge[2][4].value=uplimit, Edge[2][5].value=uplimit ; </p><p>  Edge[2][6].value=uplimit, Edge[2][7].value=uplimit , Edge[2][8].value=uplimit;</

50、p><p>  Edge[2][9].value=uplimit, Edge[2][10].value=uplimit;</p><p>  Edge[3][0].value=90 , Edge[3][1].value=32 , Edge[3][2].value=uplimit ; </p><p>  Edge[3][3].value

51、=0 , Edge[3][4].value=uplimit, Edge[3][5].value=uplimit ; </p><p>  Edge[3][6].value=uplimit, Edge[3][7].value=uplimit , Edge[3][8].value=26;</p><p>  Edge[3][9].value=uplimit,

52、Edge[3][10].value=uplimit;</p><p>  Edge[4][0].value=uplimit, Edge[4][1].value=uplimit , Edge[4][2].value=uplimit ;</p><p>  Edge[4][3].value=uplimit, Edge[4][4].value=0, Edge[4][

53、5].value=9 ; </p><p>  Edge[4][6].value=uplimit, Edge[4][7].value=uplimit , Edge[4][8].value=uplimit;</p><p>  Edge[4][9].value=uplimit, Edge[4][10].value=60;</p><p>  Edge[5

54、][0].value=uplimit , Edge[5][1].value=uplimit , Edge[5][2].value=uplimit ;</p><p>  Edge[5][3].value=uplimit, Edge[5][4].value=9, Edge[5][5].value=0 ;</p><p>  Edge[5][6].value=upl

55、imit , Edge[5][7].value=15 , Edge[5][8].value=50;</p><p>  Edge[5][9].value=14, Edge[5][10].value=uplimit;</p><p>  Edge[6][0].value=10 , Edge[6][1].value=10 , Edge[

56、6][2].value=uplimit; </p><p>  Edge[6][3].value=uplimit, Edge[6][4].value=uplimit, Edge[6][5].value=uplimit ; </p><p>  Edge[6][6].value=0 , Edge[6][7].value=35 , Edge[6][8].v

57、alue=uplimit;</p><p>  Edge[6][9].value=30, Edge[6][10].value=uplimit;</p><p>  Edge[7][0].value=uplimit , Edge[7][1].value=uplimit , Edge[7][2].value=uplimit ; </p><p> 

58、 Edge[7][3].value=uplimit, Edge[7][4].value=uplimit, Edge[7][5].value=15 ; </p><p>  Edge[7][6].value=35 , Edge[7][7].value=0 , Edge[7][8].value=uplimit;</p><p>  Edge[7][9].v

59、alue=13, Edge[7][10].value=uplimit;</p><p>  Edge[8][0].value=uplimit , Edge[8][1].value=21 , Edge[8][2].value=uplimit ; </p><p>  Edge[8][3].value=26, Edge[8][4].value=u

60、plimit; Edge[8][5].value=50 ;</p><p>  Edge[8][6].value=uplimit , Edge[8][7].value=uplimit , Edge[8][8].value=0;</p><p>  Edge[8][9].value=22, Edge[8][10].value=10;</p><p

61、>  Edge[9][0].value=uplimit , Edge[9][1].value=16 , Edge[9][2].value=uplimit ;</p><p>  Edge[9][3].value=uplimit, Edge[9][4].value=uplimit, Edge[9][5].value=14 ; </p><p>  Edge[9

62、][6].value=30 , Edge[9][7].value=13 , Edge[9][8].value=22;</p><p>  Edge[9][9].value=0, Edge[9][10].value=uplimit;</p><p>  Edge[10][0].value=uplimit , Edge[10][1].value=u

63、plimit , Edge[10][2].value=uplimit;</p><p>  Edge[10][3].value=uplimit, Edge[10][4].value=60; Edge[10][5].value=uplimit ; </p><p>  Edge[10][6].value=uplimit , Edge[10][7].value=uplimit

64、 , Edge[10][8].value=10;</p><p>  Edge[10][9].value=uplimit, Edge[10][10].value=0;</p><p><b>  } </b></p><p><b>  } </b></p><p><b> 

65、 } </b></p><p>  /* 找出場(chǎng)所間的最短距離--迪杰斯特拉算法 */ </p><p>  void ShortestDist(int s){ </p><p>  for ( int i=0;i<11;i++){ //dist和path數(shù)組初始化 </p>

66、<p>  dist[i].value=Edge[s][i].value; //鄰接矩陣第s行元素賦值到dist中 </p><p>  S[i].value=0; //已求出最短路徑的頂點(diǎn)集合初始化 </p><p>  if(i!=s && dist[i].value<uplimit){ <

67、;/p><p>  path[i].value=s; </p><p><b>  } </b></p><p>  else path[i].value=-1; //路徑存放數(shù)組初始化</p><p><b>  } </b></p&g

68、t;<p>  S[s].value=1; //頂點(diǎn)s加入頂點(diǎn)集合</p><p>  dist[s].value=0; </p><p>  /* 循環(huán)計(jì)算該場(chǎng)所

69、與鄰接場(chǎng)所之間的最短距離 */ </p><p>  for (i=0;i<11-1;i++){ //從頂點(diǎn)s確定n-1條路徑 </p><p>  float min=uplimit; </p><p>  int u=s; </p><p>  for (int j=0

70、;j<11;j++){ //選擇當(dāng)前不在集合S中具有最短路徑的頂點(diǎn)u </p><p>  /* 如果有路徑比目前的最小值還小,則替換這個(gè)最小值 */ </p><p>  if (!S[j].value && dist[j].value<min){ </p><p><b&g

71、t;  u=j; </b></p><p>  min=dist[j].value; </p><p><b>  }</b></p><p><b>  } </b></p><p>  S[u].value=1;

72、 //將頂點(diǎn)u加入集合S,表示它已在最短路徑上 </p><p><b>  } </b></p><p><b>  } </b></p><p>  void bh() //顯示場(chǎng)所名稱</p><p><b> 

73、 {</b></p><p>  printf("0.女生公寓 1.圖書(shū)館 2.體育館\n");</p><p>  printf("3.五道門(mén) 4.一號(hào)教學(xué)樓 5.男生公寓\n");</p><p>  printf("6.食堂

74、 7.體育場(chǎng) 8.一道門(mén)\n");</p><p>  printf("9.十號(hào)教學(xué)樓 10.實(shí)驗(yàn)樓\n");</p><p><b>  }</b></p><p>  /*將頂點(diǎn)序列號(hào)轉(zhuǎn)換成場(chǎng)所名稱*/</p><p&

75、gt;  void Outpath(int c) </p><p>  { switch(c)</p><p><b>  {</b></p><p>  case 0: printf("女生公寓");break;</p><p>  case 1: printf

76、("圖書(shū)館");break;</p><p>  case 2: printf( "體育館");break;</p><p>  case 3: printf("五道門(mén)");break;</p><p>  case 4: printf("一號(hào)教學(xué)樓");break;</p>

77、<p>  case 5: printf( "男生公寓");break;</p><p>  case 6: printf("食堂");break;</p><p>  case 7: printf("體育場(chǎng)");break;</p><p>  case 8: printf("一道

78、門(mén)");break;</p><p>  case 9: printf( "十號(hào)教學(xué)樓");break;</p><p>  case 10:printf("實(shí)驗(yàn)樓");break;</p><p><b>  }</b></p><p><b>  }<

79、/b></p><p>  /* 輸出兩個(gè)場(chǎng)所之間的最短距離,和最短路徑 */ </p><p>  void getdata(int s,int e){ </p><p>  D[0].value=e; </p><p>  int k; </p><p>  for (k=0;D

80、[k].value!=s;k++){ </p><p>  D[k+1].value=path[D[k].value].value; </p><p><b>  } </b></p><p>  if(S[e].value){ </p><p>  printf("\n\t場(chǎng)所%d,%d之間的

81、最短距離是:%d",s,e,dist[e].value); </p><p>  cout<<"\n\t場(chǎng)所"<<s<<","<<e<<"之間的最短路徑是:"; </p><p>  for(; k!=-1;k--){ </p><

82、;p>  Outpath(D[k].value);</p><p>  if (k!=0){ </p><p>  cout<<" --> "; </p><p><b>  } </b></p><p><b>  } </b></

83、p><p><b>  } </b></p><p><b>  else </b></p><p>  printf("\n\t場(chǎng)所%d到場(chǎng)所%d之間沒(méi)有路徑!",s,e); </p><p><b>  } </b></p><

84、;p>  void Begin(){ </p><p>  int flag=1; </p><p><b>  int s,e;</b></p><p>  while ( flag ){ </p><p><b>  bh();</b></p><p>  pr

85、intf("\n\t請(qǐng)輸入起始場(chǎng)所號(hào)與目的場(chǎng)所號(hào):"); </p><p>  scanf("%d%d",&s,&e); </p><p>  if(s<11 && s>=0 && e<11 && e>=0){ </p><p>

86、;  flag=0; </p><p><b>  } </b></p><p><b>  else </b></p><p>  printf("\n場(chǎng)所號(hào)非法,請(qǐng)重新輸入!"); </p><p><b>  }</b></p&g

87、t;<p>  ShortestDist(s); </p><p>  getdata(s,e); </p><p><b>  }</b></p><p>  /*顯示場(chǎng)所的具體信息*/</p><p>  void info(int c) //c為場(chǎng)所對(duì)應(yīng)的數(shù)字號(hào)&

88、lt;/p><p><b>  { </b></p><p><b>  switch(c)</b></p><p><b>  {</b></p><p><b>  case 0:</b></p><p>  printf(&qu

89、ot;\t 女生公寓,住宿條件較好。");</p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  printf("\t 圖書(shū)館,內(nèi)部藏有豐富的書(shū)籍,供同學(xué)們學(xué)習(xí)參考,也可以自習(xí)。");</p><p>

90、<b>  break;</b></p><p><b>  case 2:</b></p><p>  printf("\t 體育館,供同學(xué)們進(jìn)行體育活動(dòng)以及上體育課。");</p><p><b>  break;</b></p><p><b&g

91、t;  case 3:</b></p><p>  printf("\t 校門(mén)。");</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  printf("\t 一號(hào)教學(xué)樓,供同學(xué)們上課和

92、自習(xí)使用。");</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  printf("\t 男生公寓,提供居住。");</p><p><b>  break;</b></

93、p><p><b>  case 6:</b></p><p>  printf("\t 食堂,有兩層樓,是同學(xué)們用餐的地方。");</p><p><b>  break;</b></p><p><b>  case 7:</b></p>&l

94、t;p>  printf("\t 體育場(chǎng),是同學(xué)們開(kāi)運(yùn)動(dòng)會(huì)和進(jìn)行體育賽事的地方。");</p><p><b>  break;</b></p><p><b>  case 8:</b></p><p>  printf("\t 一道門(mén),晚上的時(shí)候這里最熱鬧。");</

95、p><p><b>  break;</b></p><p><b>  case 9:</b></p><p>  printf("\t 十號(hào)教學(xué)樓,這棟樓供學(xué)習(xí)上課使用。");</p><p><b>  break;</b></p><

96、p><b>  case 10:</b></p><p>  printf("\t 實(shí)驗(yàn)樓,是同學(xué)們計(jì)算機(jī)上機(jī),各系做實(shí)驗(yàn)的地方。");</p><p><b>  break;</b></p><p><b>  default:</b></p><p&

97、gt;  printf("\t輸入不合法,請(qǐng)重新輸入!");</p><p><b>  break;</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void num(){</p>

98、<p>  printf("****************************************\n");</p><p>  printf("***** 校園導(dǎo)航系統(tǒng) *****\n");</p><p>  printf("****************************

99、************\n");</p><p>  printf(" 0.女生公寓\n");</p><p>  printf(" 1.圖書(shū)館\n"); </p><p>  printf(" 2.體育館\n");</p><p>  pri

100、ntf(" 3.五道門(mén)\n"); </p><p>  printf(" 4.一號(hào)教學(xué)樓\n"); </p><p>  printf(" 5.男生公寓\n");</p><p>  printf(" 6.食堂\n"); </p>

101、<p>  printf(" 7.體育場(chǎng)\n"); </p><p>  printf(" 8.一道門(mén)\n"); </p><p>  printf(" 9.十號(hào)教學(xué)樓\n"); </p><p>  pri

102、ntf(" 10.實(shí)驗(yàn)樓\n");</p><p><b>  }</b></p><p>  void main(){</p><p><b>  int c;</b></p><p>  char option; </p><p>  printf

103、("*****************************************************\n");</p><p>  printf("\t\t歡迎光臨中北大學(xué)\n");</p><p>  printf("*****************************************************\n&

104、quot;);</p><p>  printf("---------------------------\n"); </p><p>  printf("1.顯示場(chǎng)所的編號(hào)\n");</p><p>  printf("2.查看場(chǎng)所的具體信息\n");</p><p>  prin

105、tf("3.找出最短路徑及計(jì)算路徑長(zhǎng)度\n"); </p><p>  printf("4.退出\n"); </p><p>  printf("---------------------------\n"); </p><p>  printf("What do you want t

106、o do?請(qǐng)輸入選擇:\n");</p><p>  cin>>option;</p><p>  while (option!='0'){</p><p>  switch(option)</p><p><b>  {</b></p><p>  case

107、 '1': </p><p><b>  num();</b></p><p>  printf("\t\t***************************************\n"); </p><p>  printf("

108、;\t\t\t1.顯示場(chǎng)所的編號(hào)\n");</p><p>  printf("\t\t\t2.查看場(chǎng)所的具體信息\n");</p><p>  printf("\t\t\t3.找出最短路徑及計(jì)算路徑長(zhǎng)度\n"); </p><p>  printf("\t\t\t4.退出\n"); &

109、lt;/p><p>  printf("\t\t***************************************\n"); </p><p>  printf("\tWhat do you want to do ?請(qǐng)輸入選擇:\n");</p><p>  cin>>option;</p>

110、<p>  system("cls"); //清屏</p><p><b>  break;</b></p><p>  case '2': //具體信息</p><p>  pr

111、intf("\n\t請(qǐng)從0~10中選擇任意字母,查看所對(duì)應(yīng)場(chǎng)所的具體信息:\n");</p><p>  printf("\t選擇11則退出\n");</p><p>  bh(); //顯示所有場(chǎng)所</p><p><b>  cin>>c;</b></p&g

112、t;<p><b>  info(c);</b></p><p>  if(c==11){</p><p>  printf("\t\t***************************************\n"); </p><p>  printf("\t\t\t1.顯示場(chǎng)所的編號(hào)\n&q

113、uot;);</p><p>  printf("\t\t\t2.查看場(chǎng)所的具體信息\n");</p><p>  printf("\t\t\t3.找出最短路徑及計(jì)算路徑長(zhǎng)度\n"); </p><p>  printf("\t\t\t4.退出\n"); </p><p>

114、  printf("\t\t***************************************\n"); </p><p>  printf("\tWhat do you want to do ?請(qǐng)輸入選擇:\n");</p><p><b>  } </b></p><p><b&g

115、t;  break;</b></p><p>  case '3': //查詢</p><p>  BuildMap();</p><p><b>  Begin();</b></p><p>  print

116、f("\n\t\t***************************************\n"); </p><p>  printf("\t\t\t1.顯示場(chǎng)所的編號(hào)\n");</p><p>  printf("\t\t\t2.查看場(chǎng)所的具體信息\n");</p><p>  printf(&q

117、uot;\t\t\t3.找出最短路徑及計(jì)算路徑長(zhǎng)度\n"); </p><p>  printf("\t\t\t4.退出\n"); </p><p>  printf("\t\t***************************************\n"); </p><p>  printf(&

118、quot;\tWhat do you want to do ?請(qǐng)輸入選擇:\n");</p><p>  cin>>option; </p><p>  system("cls");</p><p><b>  break; </b></p><p>  cas

119、e'4': //退出</p><p><b>  exit(0);</b></p><p><b>  break; </b></p><p><b>  } </b>&l

120、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  五.課程設(shè)計(jì)心得及存在問(wèn)題</p><p>  通過(guò)本次課程設(shè)計(jì)的制作完成,初步了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,了解了軟件開(kāi)發(fā)的基本過(guò)程,其中包括需求分析,概要設(shè)計(jì),完善分析,程序的大體設(shè)計(jì),根據(jù)需

121、求編寫(xiě)源代碼,代碼編譯測(cè)試,最終完成程序包。在設(shè)計(jì)中通過(guò)查找圖書(shū)資料和網(wǎng)上資源完成求最短路徑的算法(迪杰斯特拉算法),從中對(duì)算法有了更深刻的理解,在程序中還涉及到圖的相關(guān)存儲(chǔ)方法,在此次設(shè)計(jì)中所使用的是鄰接矩陣的方式,完成了對(duì)校園有向圖的構(gòu)建,使用Edge[][].value對(duì)景點(diǎn)距離賦值。在初次運(yùn)行程序的時(shí)候,出現(xiàn)了很多錯(cuò)誤,在修改程序的過(guò)程的中,培養(yǎng)了嚴(yán)謹(jǐn)?shù)脑O(shè)計(jì)態(tài)度和科學(xué)的工作方法和作風(fēng)。本系統(tǒng)在開(kāi)發(fā)中也是嚴(yán)格按照學(xué)校的實(shí)際情況進(jìn)行

122、開(kāi)發(fā)的,在開(kāi)發(fā)中,查閱了很多相關(guān)的算法資料,鞏固了數(shù)據(jù)結(jié)構(gòu)、C語(yǔ)言和C++方面的知識(shí),同時(shí)也學(xué)習(xí)了新的算法知識(shí)。最重要的是在開(kāi)發(fā)過(guò)程中,通過(guò)不斷地學(xué)習(xí),不斷提高自己編程能力和實(shí)際應(yīng)用能力,還有助于改善自己的邏輯思維能力,這對(duì)自己以后對(duì)軟件的開(kāi)發(fā)提供很大的幫助。</p><p>  存在的問(wèn)題:程序中在輸出最短路徑時(shí),只能輸出兩個(gè)景點(diǎn)之間的最短距離值,而不能將實(shí)際的行走路線輸出,這一點(diǎn)沒(méi)有體現(xiàn)出要求中的界面友好與操

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論