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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論