數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—校園導(dǎo)航問題報(bào)告_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)學(xué)與計(jì)算機(jī)學(xué)院</b></p><p><b>  課程設(shè)計(jì)說明書</b></p><p>  課 程 名 稱: 數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì) </p><p>  課 程 代 碼: </p><p>  題

2、 目: 校園導(dǎo)航問題 </p><p>  年級(jí)/專業(yè)/班: </p><p>  學(xué) 生 姓 名: </p><p>  學(xué)   號(hào): </p><p>  開 始 時(shí)

3、 間: 年 月 日</p><p>  完 成 時(shí) 間: 年 月 日</p><p><b>  課程設(shè)計(jì)成績:</b></p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  數(shù) 據(jù) 結(jié) 構(gòu) 課 程

4、設(shè) 計(jì) 任 務(wù) 書</p><p>  學(xué)院名稱: 數(shù)學(xué)與計(jì)算機(jī)學(xué)院 課程代碼: 8404181 </p><p>  專 業(yè): 年 級(jí): </p><p><b>  一、設(shè)計(jì)題目</b></p>

5、<p><b>  校園導(dǎo)航問題</b></p><p><b>  二、主要內(nèi)容</b></p><p>  設(shè)計(jì)西華大學(xué)的平面圖,至少包括10個(gè)以上的場所,找出從任意場所到達(dá)另一場所的最短路徑。</p><p>  三、具體要求及應(yīng)提交的材料</p><p>  1.每個(gè)同學(xué)以自己的

6、學(xué)號(hào)和姓名建一個(gè)文件夾,如:“312009080611101張三”。里面應(yīng)包括:學(xué)生按照課程設(shè)計(jì)的具體要求所開發(fā)的所有源程序(應(yīng)該放到一個(gè)文件夾中)、任務(wù)書和課程設(shè)計(jì)說明書的電子文檔。</p><p>  2.打印的課程設(shè)計(jì)說明書(注意:在封面后夾入打印的“任務(wù)書”以后再裝訂)。</p><p>  四、主要技術(shù)路線提示</p><p>  涉及無向圖的操作。該設(shè)計(jì)

7、共分三部分,一是建立西華大學(xué)平面圖的存儲(chǔ)結(jié)構(gòu),二是解決單源點(diǎn)最短路徑問題,最后再實(shí)現(xiàn)任意一對(duì)場所之間的最短路徑問題。</p><p><b>  五、進(jìn)度安排</b></p><p>  共計(jì)兩周時(shí)間,建議進(jìn)度安排如下:</p><p>  選題,應(yīng)該在上機(jī)實(shí)驗(yàn)之前完成</p><p>  需求分析、概要設(shè)計(jì)可分配4學(xué)時(shí)

8、完成</p><p>  詳細(xì)設(shè)計(jì)可分配4學(xué)時(shí)</p><p>  調(diào)試和分析可分配10學(xué)時(shí)。</p><p>  2學(xué)時(shí)的機(jī)動(dòng),可用于答辯及按教師要求修改課程設(shè)計(jì)說明書。</p><p>  注:只用課內(nèi)上機(jī)時(shí)間一般不能完成設(shè)計(jì)任務(wù),所以需要學(xué)生自行安排時(shí)間做補(bǔ)充。</p><p>  六、推薦參考資料(不少于3篇)

9、</p><p>  [1]蘇仕華等編著,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),機(jī)械工業(yè)出版社,2007</p><p> ?。?]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)(C語言版),清華大學(xué)出版社,2003</p><p>  [3]嚴(yán)蔚敏等編著,數(shù)據(jù)結(jié)構(gòu)題集(C語言版),清華大學(xué)出版社,2003</p><p>  指導(dǎo)教師 簽名日期 年 月

10、 日</p><p>  系 主 任 審核日期 年 月 日</p><p><b>  校園導(dǎo)航問題</b></p><p>  摘要:程序設(shè)計(jì)目的是用哈斯圖方式計(jì)算兩個(gè)旅游點(diǎn)的最短距離以及路線。編程所實(shí)現(xiàn)的功能除了可以查詢兩個(gè)旅游點(diǎn)的最短距離以及最短的路線,還可以看到旅游點(diǎn)的介紹,以及逛遍所有旅游點(diǎn)所能組成

11、的所有路線可能,實(shí)現(xiàn)全面查詢。 </p><p>  關(guān)鍵字:景點(diǎn);路線;距離;校園導(dǎo)航</p><p>  課程設(shè)計(jì)題目 </p><p>  設(shè)計(jì)要求:設(shè)計(jì)你的學(xué)校的平面圖,至少包括10個(gè)以上的場所,每兩個(gè)場所間可以有不同</p><p>  的路,且路長也可能不同,找出從任意場所到達(dá)另一場所的最佳路徑(最短路徑)。</p&g

12、t;<p><b>  分析</b></p><p>  2.1設(shè)計(jì)基礎(chǔ):要掌握最短路徑的實(shí)現(xiàn)方式。</p><p>  2.2分析設(shè)計(jì)課題的要求,要求編程實(shí)現(xiàn)以下功能:</p><p><b>  (1)查詢景點(diǎn)路徑</b></p><p><b> ?。?)查詢景點(diǎn)信息&

13、lt;/b></p><p><b> ?。?)查看參觀路線</b></p><p> ?。?)查詢各景點(diǎn)之間的距離</p><p><b>  2.3主控菜單設(shè)計(jì)</b></p><p>  為實(shí)現(xiàn)通信錄管理的操作功能,首先設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的主控菜單程序,然后</p>&

14、lt;p>  再為這些菜單項(xiàng)配上相應(yīng)的功能。</p><p>  程序運(yùn)行后,給出菜單項(xiàng)的內(nèi)容和輸入提示,如下:</p><p><b>  1.學(xué)校簡介</b></p><p><b>  2.查詢景點(diǎn)路徑</b></p><p><b>  3. 查詢景點(diǎn)信息</b>

15、</p><p><b>  4. 查看參觀路線</b></p><p>  5. 查詢各景點(diǎn)之間的距離</p><p><b>  6. 退出</b></p><p>  2.4設(shè)計(jì)課題已明確要求,有關(guān)的定義如下:</p><p>  typedefstructArcCel

16、l{</p><p>  intadj; // 相鄰接的景點(diǎn)之間的路程</p><p>  char *info;</p><p>  }ArcCell; // 定義邊的類型</p><p>  typedefstructVertexType{</p><p>  int number; // 景點(diǎn)編號(hào)</p&g

17、t;<p>  char *sight; // 景點(diǎn)名稱</p><p>  char *description; // 景點(diǎn)描述</p><p>  }VertexType; // 定義頂點(diǎn)的類型</p><p>  typedefstruct{</p><p>  VertexType vex[NUM]; // 圖中的頂點(diǎn),

18、即為景點(diǎn)</p><p>  ArcCell arcs[NUM][NUM]; // 圖中的邊,即為景點(diǎn)間的距離</p><p>  intvexnum,arcnum; // 頂點(diǎn)數(shù),邊數(shù)</p><p>  }MGraph; // 定義圖的類型</p><p><b>  共0條評(píng)論...</b></p>

19、<p><b>  3.步驟</b></p><p><b>  3.1函數(shù)調(diào)用圖</b></p><p><b>  函數(shù)調(diào)用關(guān)系</b></p><p>  3.2主代碼#include<iostream > </p><p>  #include

20、<string.h></p><p>  #include <stdio.h> </p><p>  #include <stdlib.h></p><p>  #define Max 32767</p><p>  #define NUM 11</p><p>  typedef

21、struct ArcCell{</p><p>  int adj; // 相鄰接的景點(diǎn)之間的路程 </p><p>  char *info;</p><p>  }ArcCell; // 定義邊的類型 </p><p>  typedef struct VertexType{</p><p>  int numbe

22、r; // 景點(diǎn)編號(hào) </p><p>  char *sight; // 景點(diǎn)名稱 </p><p>  char *description; // 景點(diǎn)描述 </p><p>  }VertexType; // 定義頂點(diǎn)的類型 </p><p>  typedef struct{</p><p>  VertexT

23、ype vex[NUM]; // 圖中的頂點(diǎn),即為景點(diǎn) </p><p>  ArcCell arcs[NUM][NUM]; // 圖中的邊,即為景點(diǎn)間的距離 </p><p>  int vexnum,arcnum; // 頂點(diǎn)數(shù),邊數(shù) </p><p>  }MGraph; // 定義圖的類型 </p><p>  MGraph G; /

24、/ 把圖定義為全局變量 </p><p>  int P[NUM][NUM]; // //</p><p>  long int D[NUM]; // 輔助變量存儲(chǔ)最短路徑長度 </p><p>  int x[13]={0}; </p><p>  void CreateUDN(int v,int a); // 創(chuàng)建圖的函數(shù) </p&

25、gt;<p>  void pingmu(); //屏幕輸出函數(shù)</p><p>  void introduce();</p><p>  void ShortestPath(int num); //最短路徑函數(shù)</p><p>  void output(int sight1,int sight2); //輸出函數(shù)</p><p

26、>  void PrintMGraph();</p><p>  char Menu(); // 主菜單 </p><p>  void search(); </p><p>  ;// 查詢景點(diǎn)信息 </p><p>  char SearchMenu(); // 查詢子菜單 </p><p>  void H

27、aMiTonian(int); // 哈密爾頓圖的遍歷 </p><p>  void NextValue(int); </p><p>  void display(); // 顯示遍歷結(jié)果 </p><p>  void main() // 主函數(shù) </p><p>  { int v0,v1;</p><p>&

28、lt;b>  char ck;</b></p><p>  system("color 0");</p><p>  CreateUDN(NUM,11);</p><p><b>  do</b></p><p><b>  { </b></p>

29、<p>  ck=Menu();</p><p>  switch(ck)</p><p><b>  {</b></p><p><b>  case'1':</b></p><p>  introduce();</p><p>  printf

30、("\n\n\t\t\t%-25s\n\n",G.vex[0].description);</p><p>  getchar();</p><p>  getchar();</p><p><b>  break;</b></p><p><b>  case '2':&l

31、t;/b></p><p>  system("cls");</p><p><b>  pingmu();</b></p><p>  printf("\n\n\t\t\t請(qǐng)選擇起點(diǎn)景點(diǎn)(1~10):");</p><p>  scanf("%d",&a

32、mp;v0);</p><p>  printf("\t\t\t請(qǐng)選擇終點(diǎn)景點(diǎn)(1~10):");</p><p>  scanf("%d",&v1);</p><p>  ShortestPath(v0); // 計(jì)算兩個(gè)景點(diǎn)之間的最短路徑 </p><p>  output(v0,v1);

33、// 輸出結(jié)果 </p><p>  printf("\n\n\t\t\t\t請(qǐng)按回車鍵繼續(xù)...\n");</p><p>  getchar();</p><p>  getchar();</p><p><b>  break;</b></p><p>  case &#

34、39;3':search();</p><p><b>  break;</b></p><p><b>  case '4':</b></p><p>  system("cls");</p><p><b>  pingmu();</b

35、></p><p><b>  x[0]=1; </b></p><p>  HaMiTonian(1); </p><p>  printf("\n\n\t\t\t\t請(qǐng)按回車鍵繼續(xù)...\n");</p><p>  getchar();</p><p>  getc

36、har();</p><p><b>  break;</b></p><p><b>  case'5':</b></p><p>  PrintMGraph();</p><p>  printf("\n\n\t\t\t\t請(qǐng)按回車鍵繼續(xù)...\n");<

37、;/p><p>  getchar();</p><p>  getchar();</p><p><b>  break;</b></p><p><b>  };</b></p><p>  }while(ck!='e');</p><p&

38、gt;<b>  }</b></p><p>  char Menu() // 主菜單 //</p><p><b>  {</b></p><p><b>  char c;</b></p><p><b>  int flag;</b></p&g

39、t;<p><b>  do{</b></p><p><b>  flag=1;</b></p><p>  system("cls");</p><p><b>  pingmu();</b></p><p>  introduce();&

40、lt;/p><p>  printf("\n\t\t\n");</p><p>  printf("\t\t \n");</p><p>  printf("\t\t 1.學(xué)校簡介 \n");</p><p>  printf("\t\t 2.查詢景點(diǎn)路徑 \n");

41、</p><p>  printf("\t\t 3.查詢景點(diǎn)信息 \n");</p><p>  printf("\t\t 4.查看參觀路線 \n");</p><p>  printf("\t\t 5.查詢各景點(diǎn)之間的距離 \n");</p><p>  printf("

42、\t\t e.退出 \n");</p><p>  printf("\t\t \n");</p><p>  printf("\t\t\n");</p><p>  printf("\t\t\t\t請(qǐng)輸入您的選擇:");</p><p>  scanf("%c&q

43、uot;,&c);</p><p>  if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')</p><p><b>  flag=0;</b></p><p>  }while(flag);&

44、lt;/p><p><b>  return c;</b></p><p><b>  }</b></p><p>  char SearchMenu() // 查詢子菜單 </p><p><b>  {</b></p><p><b>  ch

45、ar c;</b></p><p><b>  int flag;</b></p><p><b>  do{</b></p><p><b>  flag=1;</b></p><p>  system("cls");</p>&

46、lt;p><b>  pingmu();</b></p><p>  introduce();</p><p>  printf("\n\t\t\n");</p><p>  printf("\t\t \n");</p><p>  printf("\t\t 1、按

47、照景點(diǎn)編號(hào)查詢 \n");</p><p>  printf("\t\t 2、按照景點(diǎn)名稱查詢 \n");</p><p>  printf("\t\t e、返回 \n");</p><p>  printf("\t\t \n");</p><p>  printf(&qu

48、ot;\t\t \n");</p><p>  printf("\t\t\t請(qǐng)輸入您的選擇:");</p><p>  scanf("%c",&c);</p><p>  if(c=='1'||c=='2'||c=='e')</p><p&g

49、t;<b>  flag=0;</b></p><p>  }while(flag);</p><p><b>  return c;</b></p><p><b>  }</b></p><p>  void search() // 查詢景點(diǎn)信息 </p>&

50、lt;p><b>  {</b></p><p><b>  int num;</b></p><p><b>  int i;</b></p><p><b>  char c;</b></p><p>  char name[20];</p

51、><p><b>  do</b></p><p><b>  {</b></p><p>  system("cls");</p><p>  c=SearchMenu();</p><p>  switch (c)</p><p>

52、<b>  {</b></p><p>  case '1': </p><p>  system("cls");</p><p>  introduce();</p><p><b>  pingmu();</b></p><p>  p

53、rintf("\n\n\t\t請(qǐng)輸入您要查找的景點(diǎn)編號(hào):");</p><p>  scanf("%d",&num);</p><p>  for(i=0;i<NUM;i++)</p><p><b>  {</b></p><p>  if(num==G.vex[i

54、].number)</p><p><b>  {</b></p><p>  printf("\n\n\t\t\t您要查找景點(diǎn)信息如下:");</p><p>  printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);</p><p&g

55、t;  printf("\n\t\t\t按任回車返回...");</p><p>  getchar();</p><p>  getchar();</p><p><b>  break;</b></p><p><b>  }</b></p><p>

56、<b>  }</b></p><p>  if(i==NUM)</p><p><b>  {</b></p><p>  printf("\n\n\t\t\t沒有找到!");</p><p>  printf("\n\n\t\t\t按回車鍵返回...");

57、</p><p>  getchar();</p><p>  getchar();</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case '2':</b><

58、/p><p>  system("cls");</p><p><b>  pingmu();</b></p><p>  introduce();</p><p>  printf("\n\n\t\t請(qǐng)輸入您要查找的景點(diǎn)名稱:");</p><p>  sca

59、nf("%s",name);</p><p>  for(i=1;i<NUM;i++)</p><p><b>  {</b></p><p>  if(!strcmp(name,</p><p>  G.vex[i].sight))</p><p><b> 

60、 {</b></p><p>  printf("\n\n\t\t\t您要查找景點(diǎn)信息如下:");</p><p>  printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);</p><p>  printf("\n\t\t\t按回車鍵返回..."

61、);</p><p>  getchar();</p><p>  getchar();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

62、gt;  if(i==NUM)</p><p><b>  {</b></p><p>  printf("\n\n\t\t\t沒有找到!");</p><p>  printf("\n\n\t\t\t按回車鍵返回...");</p><p>  getchar();</p&

63、gt;<p>  getchar();</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  }while(c!='e');</p>&l

64、t;p><b>  }</b></p><p>  void CreateUDN(int v,int a) // 創(chuàng)建圖的函數(shù) </p><p><b>  { </b></p><p><b>  int i,j;</b></p><p>  G.vexnum=v; /

65、/ 初始化結(jié)構(gòu)中的景點(diǎn)數(shù)和邊數(shù) </p><p>  G.arcnum=a;</p><p>  for(i=1;i<G.vexnum;++i) G.vex[i].number=i; // 初始化每一個(gè)景點(diǎn)的編號(hào) </p><p>  // 初始化沒一個(gè)景點(diǎn)名及其景點(diǎn)描述 </p><p>  G.vex[0].sight="

66、學(xué)校簡介";</p><p>  G.vex[1].sight="東大門";</p><p>  G.vex[2].sight="培訓(xùn)樓";</p><p>  G.vex[3].sight="氣象樓";</p><p>  G.vex[4].sight="文德樓

67、";</p><p>  G.vex[5].sight="明德樓";</p><p>  G.vex[6].sight="尚賢樓";</p><p>  G.vex[7].sight="電影院";</p><p>  G.vex[8].sight="北辰樓&quo

68、t;;</p><p>  G.vex[9].sight="圖書館";</p><p>  G.vex[10].sight="實(shí)驗(yàn)樓";</p><p>  // 這里把所有的邊假定為32767,含義是這兩個(gè)景點(diǎn)之間是不可到達(dá) </p><p>  for(i=1;i<G.vexnum;++i)&

69、lt;/p><p><b>  {</b></p><p>  for(j=1;j<G.vexnum;++j) </p><p><b>  {</b></p><p>  G.arcs[i][j].adj=Max;</p><p>  G.arcs[i][j].info=

70、NULL;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //下邊是可直接到達(dá)的景點(diǎn)間的距離,由于兩個(gè)景點(diǎn)間距離是互相的,</p><p>  // 所以要對(duì)圖中對(duì)稱的邊同時(shí)賦值。</p><p>  G.arcs[1][

71、4].adj=G.arcs[4][1].adj=200;</p><p>  G.arcs[1][3].adj=G.arcs[3][1].adj=150;</p><p>  G.arcs[3][5].adj=G.arcs[5][3].adj=100;</p><p>  G.arcs[3][10].adj=G.arcs[10][3].adj=400;</p&

72、gt;<p>  G.arcs[4][6].adj=G.arcs[6][4].adj=200;</p><p>  G.arcs[2][5].adj=G.arcs[5][2].adj=200;</p><p>  G.arcs[2][4].adj=G.arcs[4][2].adj=100;</p><p>  G.arcs[5][7].adj=G.ar

73、cs[7][5].adj=150;</p><p>  G.arcs[4][6].adj=G.arcs[6][4].adj=150;</p><p>  G.arcs[4][7].adj=G.arcs[7][4].adj=150;</p><p>  G.arcs[6][8].adj=G.arcs[8][6].adj=150;</p><p>

74、;  G.arcs[7][8].adj=G.arcs[8][7].adj=100;</p><p>  G.arcs[6][9].adj=G.arcs[9][6].adj=200;</p><p><b>  }</b></p><p>  // 打印出鄰接矩陣</p><p>  void PrintMGraph()&

75、lt;/p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  cout<<"\n ====================================================================\n\n ";<

76、/p><p>  for(i=1;i<G.vexnum;++i)</p><p><b>  {</b></p><p>  cout<<G.vex[i].sight<<" ";</p><p><b>  }</b></p><p&

77、gt;  cout<<endl;</p><p>  for(i=1;i<G.vexnum;++i)</p><p><b>  {</b></p><p>  cout<<"\n\n"<<G.vex[i].sight<<" ";</p>

78、<p>  for(j=1;j<G.vexnum;++j)</p><p><b>  {</b></p><p>  if(G.arcs[i][j].adj==Max)</p><p>  cout<<" no ";</p><p><b>  else<

79、;/b></p><p>  cout<<" "<<G.arcs[i][j].adj;</p><p><b>  }</b></p><p><b>  }</b></p><p>  cout<<"\n\n\n\n=====

80、==============================================================\n\n\n";</p><p><b>  }</b></p><p>  void introduce() // 介紹函數(shù) </p><p><b>  {</b></p>

81、<p><b>  int i;</b></p><p>  for(i=1;i<=NUM;i++)</p><p><b>  { </b></p><p>  G.vex[0].description="南京信息工程大學(xué)是江蘇省人民政府和中國氣象局共建的全國重點(diǎn)高校,是江蘇省十一五重點(diǎn)建設(shè)的

82、15所大學(xué)之一。";</p><p>  G.vex[1].description="東大門,有五根大柱子 ";</p><p>  G.vex[2].description="留學(xué)生學(xué)習(xí)的地方";</p><p>  G.vex[3].description="氣象樓,特色樓 ";</p&

83、gt;<p>  G.vex[4].description="全校最大的教學(xué)樓 ";</p><p>  G.vex[5].description="又一個(gè)教學(xué)樓";</p><p>  G.vex[6].description="實(shí)驗(yàn)樓,歷史悠久";</p><p>  G.vex[7].d

84、escription="經(jīng)常放恐怖片 ";</p><p>  G.vex[8].description="聽說有靈異事件發(fā)生過 ";</p><p>  G.vex[9].description="很不錯(cuò)";</p><p>  G.vex[10].description="剛建好的,蠻新的,不

85、錯(cuò)";</p><p><b>  }</b></p><p><b>  }</b></p><p>  void pingmu() // 屏幕輸出函數(shù) </p><p><b>  { </b></p><p><b>  int

86、 i;</b></p><p>  printf("\n\n\t\t***************歡迎來到南京信息工程大學(xué)**************\n\n");</p><p>  printf("\t\t\n");</p><p>  printf("\t\t\t\t學(xué)校簡介\t\t\n"

87、,1,1);</p><p>  printf("\t\t\n");</p><p>  printf("\t\t\t\t學(xué)校概況\t\t\n",6,6);</p><p>  printf("\t\t\n");</p><p>  for(i=1;i<NUM;i++)<

88、/p><p><b>  {</b></p><p>  printf("\t\t%c\t\t(%2d)%-20s%c\t\t\t",1,i,G.vex[i].sight,1); // 輸出景點(diǎn)列表 </p><p><b>  }</b></p><p>  printf(&quo

89、t;\t\t\n\n");</p><p><b>  }</b></p><p>  void ShortestPath(int num) // 迪杰斯特拉算法最短路徑函數(shù) num為入口點(diǎn)的編號(hào) </p><p><b>  { </b></p><p>  int v,w,i,t; /

90、/ i、w和v為計(jì)數(shù)變量 </p><p>  int final[NUM]; </p><p><b>  int min;</b></p><p>  for(v=1;v<NUM;v++)</p><p><b>  {</b></p><p>  final[v]

91、=0; // 假設(shè)從頂點(diǎn)num到頂點(diǎn)v沒有最短路徑 </p><p>  D[v]=G.arcs[num][v].adj;// 將與之相關(guān)的權(quán)值放入D中存放 </p><p>  for(w=1;w<NUM;w++) // 設(shè)置為空路徑 </p><p>  P[v][w]=0;</p><p>  if(D[v]<32767)

92、// 存在路徑 </p><p><b>  { </b></p><p>  P[v][num]=1; // 存在標(biāo)志置為一 </p><p>  P[v][v]=1; // 自身到自身 </p><p><b>  }</b></p><p><b>  }&l

93、t;/b></p><p><b>  D[num]=0;</b></p><p>  final[num]=1; // 初始化num頂點(diǎn)屬于S集合 </p><p>  // 開始主循環(huán),每一次求得num到某個(gè)頂點(diǎn)的最短路徑,并將其加入到S集合 </p><p>  for(i=1;i<NUM;++i) /

94、/ 其余G.vexnum-1個(gè)頂點(diǎn) </p><p><b>  {</b></p><p>  min=Max; // 當(dāng)前所知離頂點(diǎn)num的最近距離 </p><p>  for(w=1;w<NUM;++w)</p><p>  if(!final[w]) // w頂點(diǎn)在v-s中 </p><

95、;p>  if(D[w]<min) // w頂點(diǎn)離num頂點(diǎn)更近 </p><p><b>  {</b></p><p><b>  v=w;</b></p><p><b>  min=D[w];</b></p><p><b>  } </b&

96、gt;</p><p>  final[v]=1; // 離num頂點(diǎn)更近的v加入到s集合 </p><p>  for(w=1;w<NUM;++w) // 更新當(dāng)前最短路徑極其距離 </p><p>  if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))// 不在s集合,并且比以前所找到的路徑都短就

97、更新當(dāng)前路徑 //</p><p><b>  {</b></p><p>  D[w]=min+G.arcs[v][w].adj;</p><p>  for(t=0;t<NUM;t++)</p><p>  P[w][t]=P[v][t];</p><p>  P[w][w]=1;<

98、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void output(int sight1,int sight2) // 輸出函數(shù) </p><p><b&g

99、t;  {</b></p><p>  int a,b,c,d,q=0;</p><p>  a=sight2; // 將景點(diǎn)二賦值給a </p><p>  if(a!=sight1) // 如果景點(diǎn)二不和景點(diǎn)一輸入重合,則進(jìn)行... </p><p><b>  {</b></p><

100、p>  printf("\n\t從%s到%s的最短路徑是",G.vex[sight1].sight,G.vex[sight2].sight);// 輸出提示信息 </p><p>  printf("\t(最短距離為 %dm.)\n\n\t",D[a]); // 輸出sight1到sight2的最短路徑長度,存放在D[]數(shù)組中 </p><p>

101、;  printf("\t%s",G.vex[sight1].sight); // 輸出景點(diǎn)一的名稱 </p><p>  d=sight1; // 將景點(diǎn)一的編號(hào)賦值給d </p><p>  for(c=0;c<NUM;++c)</p><p><b>  {</b></p><p>  g

102、ate:; // 標(biāo)號(hào),可以作為goto語句跳轉(zhuǎn)的位置 </p><p>  P[a][sight1]=0;</p><p>  for(b=0;b<NUM;b++)</p><p><b>  {</b></p><p>  if(G.arcs[d][b].adj<32767&&P[a][b

103、]) // 如果景點(diǎn)一和它的一個(gè)臨界點(diǎn)之間存在路徑且最短路徑 </p><p><b>  {</b></p><p>  printf("-->%s",G.vex[b].sight); // 輸出此節(jié)點(diǎn)的名稱 </p><p>  q=q+1; // 計(jì)數(shù)變量加一,滿8控制輸出時(shí)的換行 </p><

104、;p>  P[a][b]=0;</p><p>  d=b; // 將b作為出發(fā)點(diǎn)進(jìn)行下一次循環(huán)輸出,如此反復(fù) </p><p>  if(q%8==0) printf("\n");</p><p>  goto gate;</p><p><b>  }</b></p><

105、p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void HaMiTonian(int m) // 哈密爾頓圖的遍歷 </p

106、><p><b>  { </b></p><p>  if(m>8) return; </p><p>  L: NextValue(m); </p><p>  if(x[m]==0) </p><p><b>  return; </b></p><

107、;p>  if(m==7&&G.arcs[1][x[8]-1].adj!=32767) </p><p>  display(); </p><p><b>  else </b></p><p>  HaMiTonian(m+1); </p><p><b>  goto L; <

108、/b></p><p><b>  } </b></p><p>  void NextValue(int k) </p><p><b>  { </b></p><p><b>  int j; </b></p><p>  l:x[k]=(x

109、[k]+1)%10; </p><p>  if(x[k]==0) </p><p><b>  return; </b></p><p>  if(G.arcs[x[k-1]-1][x[k]-1].adj!=32767) </p><p><b>  { </b></p><p

110、>  for(j=0;j<k;j++) </p><p>  if(x[j]==x[k]) </p><p><b>  goto l; </b></p><p><b>  return; </b></p><p><b>  } </b></p>

111、<p><b>  else </b></p><p><b>  goto l; </b></p><p><b>  } </b></p><p>  void display() </p><p><b>  { </b></p>

112、;<p><b>  int i=1;</b></p><p>  printf("\n\n\t");</p><p>  for(i=1;i<8;i++) </p><p>  printf("%s->",G.vex[x[i]-1].sight); </p>&l

113、t;p>  printf("出口"); </p><p>  printf("\n");</p><p><b>  } </b></p><p><b>  3.3實(shí)現(xiàn)截圖</b></p><p><b>  一開始的頁面</b>

114、</p><p><b>  學(xué)校的簡介</b></p><p>  所需要的兩個(gè)景點(diǎn)的最短路線及距離</p><p>  所要參觀的景點(diǎn)的介紹</p><p><b>  所有景點(diǎn)的參觀路線</b></p><p><b>  每兩個(gè)景點(diǎn)間的距離</b>

115、;</p><p><b>  總結(jié)討論</b></p><p>  在寫輸入語句中沒有正確引用,例如在scanf("%d",&num);中沒有</p><p>  對(duì)num加&引用而只寫了num;原因是在下面的num=G.vex[i].number=i語句中,num地址存放了操作數(shù)字,不引用系統(tǒng)就會(huì)出錯(cuò)。其

116、他地方的scanf語句也是出現(xiàn)同樣的問題,例如scanf("%d",&v0); scanf("%d",&v1);在輸入起始點(diǎn)和終點(diǎn)的時(shí)候,V0,V1沒有用引用地址符號(hào),因此在執(zhí)行輸入的時(shí)候,系統(tǒng)就會(huì)認(rèn)定是非法寫入操作,從而導(dǎo)致系統(tǒng)出錯(cuò)。</p><p>  語法邏輯出錯(cuò),在執(zhí)行的時(shí)候,有的時(shí)候出現(xiàn)死循環(huán),有的時(shí)候屏幕出現(xiàn)null和亂碼。</p>

117、<p>  語句的編寫有誤,不合法。如在我寫主菜單和子菜單里寫switch語句的時(shí)候,do while 語句與if else語句嵌套使用,使程序邏輯出現(xiàn)混亂,造成調(diào)試出錯(cuò)。</p><p>  變量名的定義出錯(cuò),造成調(diào)用的時(shí)候出錯(cuò),不過改過來就好了</p><p>  算法的編寫不全面,漏掉個(gè)別語句,如在調(diào)試的時(shí)候檢查發(fā)現(xiàn)寫迪杰斯特拉(DijkStra)算法的時(shí)候并沒有寫完整,

118、造成輸出結(jié)果不正確;開始查找錯(cuò)誤的時(shí)候并不知道錯(cuò)在哪里,但經(jīng)過與書本上的算法進(jìn)行核對(duì)以后,才找出問題根源所在。</p><p>  定義數(shù)據(jù)類型出錯(cuò),前面定義的數(shù)據(jù)類型是字符型后怯定義成整形,即數(shù)據(jù)類型不一致,造成調(diào)試出錯(cuò)。</p><p>  程序調(diào)試出來了,但沒有達(dá)到預(yù)先想要的結(jié)果。</p><p>  這些小問題都是比較熟悉的問題,開始進(jìn)行調(diào)試的時(shí)候都會(huì)出現(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論