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

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  班級: </b></p><p><b>  學(xué)號: </b></p><p><b>  姓名: </b>

2、</p><p><b>  指導(dǎo)老師: </b></p><p><b>  日期: </b></p><p>  7.全國交通咨詢模擬</p><p>  出于不同目的的旅客對交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的時間盡可能短,出門旅游的游客則期望旅費(fèi)盡可能省,而老年旅客則要求

3、中轉(zhuǎn)次數(shù)最少。編制一個全國城市間的交通咨詢程序,為旅客提供兩種或三種最優(yōu)決策的交通咨詢。要求:</p><p> ?。?)提供對城市信息進(jìn)行編輯(如添加或刪除)的功能。</p><p>  (2)城市之間有兩種交通工具:火車和飛機(jī)。提供對列車時刻表和飛機(jī)航班進(jìn)行編輯(增設(shè)或刪除)的功能。</p><p>  (3)提供兩種最優(yōu)決策:最快到達(dá)或最省錢到達(dá)。全程只考慮一

4、種交通工具。</p><p> ?。?)旅途中耗費(fèi)的總時間應(yīng)該包括中轉(zhuǎn)站的等候時間。</p><p> ?。?)咨詢以用戶和計(jì)算機(jī)的對話方式進(jìn)行。</p><p><b>  1.需求分析</b></p><p>  1、設(shè)計(jì)最短路徑的算法及其需要信息的存儲:本設(shè)計(jì)中最短路徑的算法利用迪杰斯特拉算法,存儲方法利用鄰接矩陣

5、存儲。</p><p>  2、 該程序所做的工作的是模擬全國交通咨詢,為旅客提供種最優(yōu)決策的交通咨詢。此程序規(guī)定:</p><p>  在程序中輸入城市名稱時,需輸入10個字母以內(nèi)的字母串;輸入列車或飛機(jī)編號時需輸入一個字符串類型;輸入列車或飛機(jī)的費(fèi)用時需輸入一個實(shí)型數(shù)據(jù);輸入列車或飛機(jī)開始時間和到達(dá)時間時均需輸入一個整型數(shù)據(jù),在選擇功能時,應(yīng)輸入與所選功能對應(yīng)的一個整型數(shù)據(jù)。</

6、p><p>  程序的輸出信息主要是:最快需要多少時間才能到達(dá),或最少需要多少旅費(fèi)才能到達(dá),說明在途中經(jīng)過的城市名稱;</p><p>  程序的功能包括:提供對城市信息的編輯,提供列車時刻表和飛機(jī)航班表的編輯,提供兩種最優(yōu)決策:最快到達(dá)、最省錢到達(dá)。</p><p><b>  設(shè)計(jì)</b></p><p><b&g

7、t;  2.1設(shè)計(jì)思想</b></p><p>  本系統(tǒng)整體上分為存儲系統(tǒng)和求最短路徑兩部分,存儲系統(tǒng)運(yùn)用到數(shù)組和結(jié)構(gòu)體。該系統(tǒng)分別存儲火車列次,航班,出發(fā)點(diǎn)與目的地以及所需要走的路程和所用費(fèi)用。最短路徑使用迪杰斯特拉算法編程求算得出最近或最便宜路徑。該算法主要分為三步:1、起始點(diǎn)(V0)與其相鄰點(diǎn)的權(quán)值(即當(dāng)前最短路徑)。2、求出當(dāng)前最短路徑中的最小值即是該起始點(diǎn)(V0)與另一點(diǎn)(Vi)的最短路徑

8、。3、V0到Vi的距離加上Vi到Vj的距離小于V0到Vj則將V0到Vi的距離加上Vi到Vj的距離記為V0到Vj當(dāng)前最短路徑,循環(huán)第二、三步。如此得到V0到各點(diǎn)的最短路徑,進(jìn)而可以得到想要的一條。</p><p><b>  數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):</b></p><p>  struct Tra//火車或飛機(jī)的存儲結(jié)構(gòu)</p><p>  {

9、 </p><p>  char cc[20]; //用"車次"的前兩個字母表示火車或飛機(jī)航班的代碼</p><p>  char start[20]; //出發(fā)點(diǎn)</p><p>  char destination[20]; //目的地</p><p>  float

10、time; //路途時間</p><p>  float price; //價(jià)錢</p><p><b>  };</b></p><p><b>  算法設(shè)計(jì)</b></p><p>  A,本設(shè)計(jì)采用的數(shù)據(jù)結(jié)構(gòu)有圖中的最短路徑。</p><p&g

11、t;  (1)、開始-----</p><p>  (2)、得到存儲最少花費(fèi)或最短時間信息的鄰接矩陣------</p><p>  (3)、得到起始點(diǎn)與相鄰的點(diǎn)的權(quán)值(即當(dāng)前最短路徑)并記錄點(diǎn)-----</p><p>  (4)、求出當(dāng)前最短路徑中的最小值即是該起始點(diǎn)(V0)與另一點(diǎn)(Vi)的最短路徑-----</p><p>  (5)

12、、V0到Vi的距離加上Vi到Vj的距離小于V0到Vj則將V0到Vi的距離加上Vi到Vj的距離記為V0到Vj當(dāng)前最短路徑并且記錄前一個點(diǎn)。</p><p>  (6)、重復(fù)(4),(5)步得到所有點(diǎn)最短路徑。</p><p>  (7)、以終點(diǎn)開始逐步向前賦值得到所需路徑并輸出該路徑的權(quán)值。</p><p><b>  代碼:</b></p

13、><p>  void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)</p><p><b>  { </b></p><p>  int i,j,k,st,et;</p><p

14、>  float min,t;</p><p>  char pcity[10][20];</p><p>  float edge[15][15],dist[15];</p><p>  int path[15],s[15];</p><p>  for(i=0;i<cn;i++)</p><p>  f

15、or(j=0;j<cn;j++)</p><p><b>  { </b></p><p>  edge[i][j]=max;</p><p><b>  } </b></p><p>  for(i=0;i<tn;i++) {</p><p>  

16、j=search(city,timetable[i].start,cn);</p><p>  k=search(city,timetable[i].destination,cn);</p><p>  if(choice==0)</p><p>  { t=timetable[i].time;</p><p>  if(t&

17、lt;edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  else </b></p><p>  {t=timetable[i].price;</p><p>  if(t<edge[j][k]) edge[j][k]=

18、t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  st=search(city,start,cn);</p><p>  et=search(city,dest,cn);</p><p>  for(i=0;i<c

19、n;i++){</p><p>  dist[i]=edge[st][i];</p><p><b>  s[i]=0;</b></p><p>  if(i!=st&&dist[i]<max) path[i]=st;</p><p>  else path[i]=-1;</p>&l

20、t;p><b>  }</b></p><p>  s[st]=1; dist[st]=0;</p><p>  for(i=0;i<cn-1;i++){</p><p><b>  min=max;</b></p><p><b>  k=st;</b></

21、p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&dist[j]<min)</p><p>  {k=j;min=dist[j];}</p><p><b>  s[k]=1;</b></p><p>  for(j=0;j<

22、cn;j++)</p><p>  if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</p><p>  dist[j]=dist[k]+edge[k][j]; path[j]=k;</p><p><b>  }</b></p>

23、<p><b>  }</b></p><p><b>  k=et;</b></p><p><b>  i=0;</b></p><p>  if(path[k]==-1){</p><p>  printf("\t\t對不起,不存在從 %s 到 %

24、s 的路線\n\n",start,dest);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  while(path[k]!=-1)</p><p><b>  {</b></p><

25、p>  strcpy(pcity[i++],city[k]);</p><p>  k=path[k];</p><p><b>  }</b></p><p>  strcpy(pcity[i++],city[st]);</p><p>  printf("\t\t最佳路線為:\n\t\t")

26、;</p><p>  for(j=i-1;j>=0;j--)</p><p>  printf("%s ",pcity[j]);</p><p>  printf("\n");</p><p>  if(choice==0) printf("\t\t所需總時間為:%5.1f小時\n&

27、quot;,dist[et]);</p><p>  else printf("\t\t所需的總費(fèi)用為:%7.2f元\n",dist[et]);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  B,界面以及主函數(shù)功能板塊&

28、lt;/p><p>  本設(shè)計(jì)采用的是在界面上通過輸入相應(yīng)的字符表示的要求來實(shí)現(xiàn)對于不同目的不同函數(shù)的調(diào)用,主要用到的數(shù)據(jù)結(jié)構(gòu)有圖中的交通網(wǎng)的各種信息的鄰接矩陣的存儲。通過顧客輸入不同的字符來實(shí)現(xiàn)不同的功能,主界面上注釋著這個程序的系統(tǒng)名稱,組員以及指導(dǎo)老師等基本學(xué)生信息,用星號來加以修飾;然后就是用一個swich語句來實(shí)現(xiàn)多功能的選取以及程序的退出;主要有一:1:修改地圖 2:編輯火車時刻表 \t3:編輯飛機(jī)

29、航班表 \t4:選擇出游路線 t5:退出;繼而通過選中其中的數(shù)字來實(shí)現(xiàn)自己的目的;然后再引用程序再用一個switch case語句來實(shí)現(xiàn)1 2 3選項(xiàng)中的添加刪除以及退出功能,然后在4中再用if語句來實(shí)現(xiàn)自己的需求考慮??梢噪S時退出程序。最后再經(jīng)調(diào)用函數(shù)再來輸出結(jié)果;</p><p><b>  代碼:</b></p><p>  # include<std

30、io.h></p><p>  #include<string.h></p><p>  #include<float.h></p><p>  const float max=FLT_MAX;</p><p>  };void main ()</p><p><b>  {

31、 </b></p><p>  int i,j,k,m,n,cn=5,tn=6,fn=6;</p><p>  printf("\t\t******************************************\n");</p><p>  printf("\t\t************************

32、******************\n");</p><p><b>  loop1:</b></p><p>  printf("\t請選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:編輯火車時刻表 \n\t\t3:編輯飛機(jī)航班表 \n\t\t4:選擇出游路線 \n\t\t5:退出");</p><

33、;p>  switch(i) //switch語句</p><p><b>  {</b></p><p>  case 1:{ //第一種情況,修改地圖*****</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b>

34、  {</b></p><p>  case 2:{ //修改火車時間表</p><p>  case 3:{//修改飛機(jī)航班表,和列車相似</p><p><b>  case 4:{</b></p><p>  printf("\t\t請選擇交通工具(1.火車 2.飛機(jī)):");<

35、;/p><p>  scanf("%d",&j);</p><p>  printf("\n");</p><p>  if(j==1&&k==1)short_path(train,city[m-1],city[n-1],city,6,5,0);</p><p>  if(j==1&

36、amp;&k==2) short_path(train,city[m-1],city[n-1],city,6,5,1);</p><p>  if(j==2&&k==1) short_path(flight,city[m-1],city[n-1],city,6,5,0);</p><p>  if(j==2&&k==2) short_path(fli

37、ght,city[m-1],city[n-1],city,6,5,1);</p><p>  goto loop1;//回到主菜單</p><p>  case5:return;//退出系統(tǒng)}</p><p><b>  2.2設(shè)計(jì)表示</b></p><p><b>  函數(shù)調(diào)用關(guān)系圖</b>&l

38、t;/p><p><b>  Main()</b></p><p>  short_path()</p><p><b>  Search()</b></p><p><b>  各模塊調(diào)用關(guān)系</b></p><p><b>  主菜單</

39、b></p><p>  修改地圖 編輯火車時刻表 編輯飛機(jī)航班表 選擇出游路線 退出</p><p><b>  修改地圖</b></p><p>  增加城市 刪除城市 返回</p><p><b>  編輯火車時刻表</b></p&g

40、t;<p>  添加 刪除 返回</p><p><b>  編輯飛機(jī)航班表</b></p><p>  添加 刪除 返回 </p><p><b>  選擇出游路線</b></p><p>  飛機(jī)

41、 火車</p><p>  最短時間 最少花費(fèi) 最短時間 最少花費(fèi)</p><p><b>  2.3詳細(xì)設(shè)計(jì)</b></p><p>  void main ()</p><p><b>  { </b></p><p>  int i

42、,j,k,m,n,cn=5,tn=6,fn=6;</p><p>  printf("\t\t************************************************\n");</p><p>  printf("\t\t******** 歡迎使用全國交通咨詢模擬 ********\n");</p>

43、<p>  printf("\t\t******** 黃建釗 ********\n");</p><p>  printf("\t\t******** 191113 ********\n");</p><p>  printf("\t\

44、t******** 20111000611 ********\n");</p><p>  printf("\t\t******** 計(jì)算機(jī)學(xué)院 ********\n");</p><p>  printf("\t\t******** 指導(dǎo)老師:朱曉蓮

45、 ********\n");</p><p>  printf("\t\t************************************************\n");</p><p>  char city[15][20]={"深圳","成都","南昌","杭州"

46、;,"北京"};//現(xiàn)有城市,最多15個城市</p><p>  struct Tra train[20]={</p><p>  {"T1","杭州","深圳",10,190},</p><p>  {"T2","北京","深圳&quo

47、t;,18,270},</p><p>  {"T3","北京","南昌",13,150},</p><p>  {"T4","北京","成都",25,300}, </p><p>  {"T5","北京",

48、"杭州",14,160},</p><p>  {"T6","南昌","杭州",11,200}</p><p><b>  };</b></p><p>  struct Tra flight[20]={</p><p>  {"F

49、1","杭州","北京",3,1500},</p><p>  {"F2","深圳","北京",2.5,1300},</p><p>  {"F3","北京","成都",1,600},</p><p&g

50、t;  {"F4","南昌","北京",3,1400},</p><p>  {"F5","深圳","南昌",1,700},</p><p>  {"F6","成都","杭州",3,1650}</p>

51、<p><b>  };</b></p><p>  printf("\t\t現(xiàn)有城市"); //輸出現(xiàn)有地圖上的城市,便于后面的輸入和修改</p><p>  for(j=0;j<cn;j++)</p><p>  printf("%d.%s\t",j+1,cit

52、y[j]);</p><p>  printf("\n\n");</p><p><b>  loop1:</b></p><p>  printf("\t請選擇所需功能:\n\t\t1:修改地圖 \n\t\t2:編輯火車時刻表 \n\t\t3:編輯飛機(jī)航班表 \n\t\t4:選擇出游路線 \n\t\t5

53、:退出");</p><p>  printf("\n\t請選擇:");</p><p>  scanf("%d",&i);</p><p>  while(i!=1&&i!=2&&i!=3&&i!=4&&i!=5)</p><

54、;p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&i);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  switch(i) /

55、/switch語句</p><p><b>  {</b></p><p>  case 1:{ //第一種情況,修改地圖</p><p><b>  loop2:</b></p><p>  printf("\t現(xiàn)有城市:\n\t\t");</p><p

56、>  for(j=0;j<cn;j++)</p><p>  printf("%d.%s\t",j+1,city[j]);</p><p>  printf("\n\n");</p><p>  printf("\t\t功能:\n\t\t 1:添加 2:刪除 3:返回\n");</p

57、><p>  printf("\t\t請選擇:");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b>  {</b></p><p

58、>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&j);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\n");</p><p><b>  if(j==1

59、)</b></p><p><b>  {</b></p><p>  printf("\t請輸入城市名:");</p><p>  scanf("%s",city[cn]);</p><p><b>  cn++;</b></p>

60、<p>  goto loop2;</p><p>  } //if語句</p><p><b>  if(j==2) </b></p><p>  {printf("\t請選擇要刪除的城市的編號:");</p><p>  scanf("%d",&k);&l

61、t;/p><p>  while(k>cn||k<1)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&k);</p><p>  

62、} //避免按錯而導(dǎo)致程序錯誤</p><p>  if(k==cn) cn--;</p><p><b>  else { </b></p><p>  for(m=k-1;m<cn-1;m++) </p><p>  strcpy(city[m],city[m+1]); //k后面的城市依次往前移一

63、位 </p><p>  cn--; //城市總數(shù)減少一個</p><p><b>  }</b></p><p>  goto loop2; //查看修改后的地圖,便于判斷或是再次修改</p><p><b>  }</b></p><p>  else goto

64、loop1; //回到主菜單</p><p><b>  }</b></p><p>  case 2:{ //修改火車時間表</p><p><b>  loop3:</b></p><p>  printf("\n\t\t現(xiàn)有火車時刻表:\n");</p>&l

65、t;p>  printf("\t\t 車次 起點(diǎn)站 終點(diǎn)站 路途時間(h) 票價(jià)(元)\n"); //輸出各火車時刻表</p><p>  for(j=0;j<tn;j++)</p><p>  printf("\t\t%d:%s\t%s\t%s\t%5.1f\t\t%5.2f\t\n",j+1,train[j].cc,t

66、rain[j].start,train[j].destination,train[j].time,train[j].price);</p><p>  printf("\n\n");</p><p>  printf("\t功能:1.添加\t2.刪除\t3.返回\n");</p><p>  printf("\t請選

67、擇:");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:&q

68、uot;);</p><p>  scanf("%d",&j);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\n");</p><p><b>  if(j==1)</b></p><p><

69、b>  {</b></p><p>  printf("現(xiàn)有城市:\n");</p><p>  for(k=0;k<cn;k++)</p><p>  printf("%d.%s\t",k+1,city[k]);</p><p>  printf("\n")

70、;</p><p>  printf("請輸入數(shù)據(jù):\n");</p><p>  printf("火車時刻表:\n");</p><p>  printf("車次 起點(diǎn)站 終點(diǎn)站 路途時間(h)票價(jià)(元)\n");</p><p>  scanf("%s %s %s

71、 %f %f",train[tn].cc,train[tn].start,train[tn].destination,&train[tn].time,&train[tn].price);</p><p>  tn++; //火車車次加一</p><p>  goto loop3; //回到loop3,查看修改后的列車信息</p><p&g

72、t;<b>  }</b></p><p>  else if(j==2)</p><p><b>  {</b></p><p>  printf("\t請選擇所需刪除車次編號:");</p><p>  scanf("%d",&k);</p&

73、gt;<p>  while(k>tn||k<1)</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&k);</p><p>  }

74、//避免按錯而導(dǎo)致程序錯誤</p><p>  if(k==tn) tn--; //火車車次減一</p><p><b>  else{</b></p><p>  for(m=k-1;m<tn-1;m++) //k后面的列車依次往前移一位</p><p>  train[m]=train[m+1];</

75、p><p><b>  tn--; </b></p><p><b>  }</b></p><p>  goto loop3; //回到loop3,查看修改后的列車信息</p><p><b>  }</b></p><p>  else goto

76、loop1; //回到主菜單</p><p><b>  }</b></p><p>  case 3:{//修改飛機(jī)航班表,和列車相似</p><p><b>  loop4:</b></p><p>  printf("\t\t現(xiàn)有飛機(jī)航班表:\n");</p>

77、<p>  printf("\t\t 班次 起點(diǎn) 終點(diǎn) 路途時間(h) 票價(jià)(元)\n");</p><p>  for(j=0;j<fn;j++)</p><p>  printf("\t\t%d: %s\t%s\t%s\t%5.1f\t\t%5.2f\t\n",j+1,flight[j].cc,flight[j].s

78、tart,flight[j].destination,</p><p>  flight[j].time,flight[j].price);</p><p>  printf("\n\n");</p><p>  printf("\t\t功能:1.添加\t2.刪除\t3.返回\n");</p><p>

79、  printf("\t\t請選擇:");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2&&j!=3)</p><p><b>  {</b></p><p>  printf(&q

80、uot;\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&j);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\n");</p><p><b>  if(j==1){</b><

81、;/p><p>  printf("現(xiàn)有城市:\n");</p><p>  for(k=0;k<cn;k++)</p><p>  printf("%d.%s\t",k+1,city[k]);</p><p>  printf("\n");</p><p>

82、;  printf("請輸入數(shù)據(jù):\n");</p><p>  printf("車次\t起點(diǎn)站\t終點(diǎn)站\t路途時間(h)\t票價(jià)(元)\n");</p><p>  scanf("%s%s%s%f%f",flight[fn].cc,flight[fn].start,flight[fn].destination,&fli

83、ght[fn].time,&flight[fn].price);</p><p><b>  fn++;</b></p><p>  goto loop4;</p><p><b>  }</b></p><p>  else if(j==2) </p><p>&l

84、t;b>  {</b></p><p>  printf("\t\t請選擇所要刪除的編號:");</p><p>  scanf("%d",&k);</p><p>  while(k>fn||k<1)</p><p><b>  {</b>&

85、lt;/p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&k);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  if(k==fn) fn--;</p><p><b> 

86、 else{</b></p><p>  for(m=k-1;m<fn-1;m++)//k后面的航班依次往前移一位 </p><p>  flight[m]=flight[m+1];</p><p><b>  fn--;</b></p><p><b>  }</b></p

87、><p>  goto loop4;</p><p><b>  }</b></p><p>  else goto loop1;//回到主菜單</p><p><b>  }</b></p><p><b>  case 4:{</b></p>

88、<p>  printf("\t\t請選擇交通工具(1.火車 2.飛機(jī)):");</p><p>  scanf("%d",&j);</p><p>  while(j!=1&&j!=2)</p><p><b>  {</b></p><p>

89、;  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&j);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\t\t請選擇決策方案(1.最短時間 2.最少花費(fèi)):");</p><p

90、>  scanf("%d",&k);</p><p>  while(k!=1&&k!=2)</p><p>  {printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&k);</p><p>  }

91、 //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\t現(xiàn)有城市:\n");</p><p>  for(i=0;i<cn;i++)</p><p>  printf("\t\t%d.%s\n",i+1,city[i]);</p><p>  printf("\n&qu

92、ot;);</p><p>  printf("\t\t出發(fā)地編號:");</p><p>  scanf("%d",&m);</p><p>  while(m>cn||m<1) //cn為現(xiàn)有城市數(shù)目</p><p><b>  {</b></p>

93、;<p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf("%d",&m);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\t\t目的地編號:");</p><p>  

94、scanf("%d",&n);</p><p>  while(n>cn||n<1) //cn為現(xiàn)有城市數(shù)目</p><p><b>  {</b></p><p>  printf("\t\t輸入有誤,請重新輸入:");</p><p>  scanf(&q

95、uot;%d",&n);</p><p>  } //避免按錯而導(dǎo)致程序錯誤</p><p>  printf("\n");</p><p>  if(j==1&&k==1)short_path(train,city[m-1],city[n-1],city,6,5,0);</p><p&

96、gt;  if(j==1&&k==2) short_path(train,city[m-1],city[n-1],city,6,5,1);</p><p>  if(j==2&&k==1) short_path(flight,city[m-1],city[n-1],city,6,5,0);</p><p>  if(j==2&&k==2) s

97、hort_path(flight,city[m-1],city[n-1],city,6,5,1);</p><p>  goto loop1;//回到主菜單</p><p><b>  }</b></p><p>  case 5: return;//退出系統(tǒng)</p><p><b>  }</b>

98、</p><p><b>  }</b></p><p>  void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)//最優(yōu)路線</p><p>  {//start表示出發(fā)地,dest表示目的地

99、,tn表示表示航班或車次的總次數(shù),cn表示城市的總數(shù)</p><p>  //choice=0表示求最短時間路線,choice=1表示求最少花費(fèi)路線</p><p>  int i,j,k,st,et;</p><p>  float min,t;</p><p>  char pcity[10][20];</p><p&

100、gt;  float edge[15][15],dist[15];</p><p>  int path[15],s[15];</p><p>  for(i=0;i<cn;i++)</p><p>  for(j=0;j<cn;j++)</p><p><b>  { </b></p>&

101、lt;p>  edge[i][j]=max;</p><p><b>  } </b></p><p>  for(i=0;i<tn;i++)/*dijkstra算法*/</p><p><b>  {</b></p><p>  j=search(city,timetable[i]

102、.start,cn);</p><p>  k=search(city,timetable[i].destination,cn);</p><p>  if(choice==0)</p><p><b>  {/*最短時間*/</b></p><p>  t=timetable[i].time;</p>&

103、lt;p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {/*最少花費(fèi)*/</b></p><p>  t=timetable[i

104、].price;</p><p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  st=search(city,start,cn);</p><p> 

105、 et=search(city,dest,cn);</p><p>  for(i=0;i<cn;i++){</p><p>  dist[i]=edge[st][i];</p><p><b>  s[i]=0;</b></p><p>  if(i!=st&&dist[i]<max) pa

106、th[i]=st;</p><p>  else path[i]=-1;</p><p><b>  }</b></p><p>  s[st]=1; dist[st]=0;</p><p>  for(i=0;i<cn-1;i++){</p><p><b>  min=max;

107、</b></p><p><b>  k=st;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&dist[j]<min)</p><p>  {k=j;min=dist[j];}</p><p>&l

108、t;b>  s[k]=1;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</p><p>  dist[j]=dist[k]+edge[k][j]; p

109、ath[j]=k;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  k=et;</b></p><p><b>  i=0;</b></p><p>  if(path[k

110、]==-1){</p><p>  printf("\t\t對不起,不存在從 %s 到 %s 的路線\n\n",start,dest);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  while(path[k]!=

111、-1)</p><p><b>  {</b></p><p>  strcpy(pcity[i++],city[k]);</p><p>  k=path[k];</p><p><b>  }</b></p><p>  strcpy(pcity[i++],city[st

112、]);</p><p>  printf("\t\t最佳路線為:\n\t\t");</p><p>  for(j=i-1;j>=0;j--)</p><p>  printf("%s ",pcity[j]);</p><p>  printf("\n");</p>

113、;<p>  if(choice==0) printf("\t\t所需總時間為:%5.1f小時\n",dist[et]);</p><p>  else printf("\t\t所需的總費(fèi)用為:%7.2f元\n",dist[et]);</p><p>  printf("\n");</p><p&

114、gt;<b>  }</b></p><p><b>  調(diào)試分析</b></p><p>  通過本次課程設(shè)計(jì),我學(xué)到了一種程序設(shè)計(jì)方法,就是結(jié)構(gòu)化程序設(shè)計(jì)方法,在程序設(shè)計(jì)過程中,我嘗試按如下方法進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)(1)自頂向下(2)逐步細(xì)化(3)模塊化設(shè)計(jì)這種設(shè)計(jì)方法的過程是將問題求解由抽象逐步具體化的過程,而且,用這種方法便于驗(yàn)證算法的

115、正確性。</p><p><b>  用戶手冊</b></p><p>  用戶運(yùn)行程序后,會出現(xiàn)如下主界面:</p><p><b>  用戶開始模擬 :</b></p><p>  選擇1,用戶可以修改地圖,包括查看已有城市,增加和刪除城市及返回</p><p>  B.

116、選擇2,用戶可以編輯火車時刻表,包括查看以有火車線路,增加和刪除火車線路及返回</p><p>  C.選擇3,用戶可以編輯飛機(jī)航班表,包括查看以有飛機(jī)航班,增加和刪除飛機(jī)航班及返回</p><p>  D.選擇4,用戶可以根據(jù)交通工具和決策方案選擇出游路線</p><p>  E.選擇5,用戶可以退出程序</p><p><b>

117、  測試數(shù)據(jù)及測試結(jié)果</b></p><p>  正確輸入并開始模擬運(yùn)行:</p><p><b>  增加城市武漢</b></p><p>  增加火車線路:T7北京到武漢,11小時,150元</p><p>  增加飛機(jī)航班:F7 北京到武漢,2小時1000元</p><p>&

118、lt;b>  選擇出游路線:</b></p><p>  從北京到深圳坐火車最省錢模式</p><p>  從北京到深圳坐火車最少時間模式</p><p>  從深圳到北京坐飛機(jī)最省錢模式</p><p>  從深圳到北京坐飛機(jī)最少時間模式</p><p><b>  源程序清單</b

119、></p><p>  # include<stdio.h></p><p>  #include<string.h></p><p>  #include<float.h></p><p>  const float max=FLT_MAX;</p><p>  struc

120、t Tra//火車或飛機(jī)的存儲結(jié)構(gòu)</p><p>  { </p><p>  char cc[20]; //用"車次"的前兩個字母表示火車或飛機(jī)航班的代碼</p><p>  char start[20]; //出發(fā)點(diǎn)</p><p>  char destin

121、ation[20]; //目的地</p><p>  float time; //路途時間</p><p>  float price; //價(jià)錢</p><p><b>  };</b></p><p>  int search(char citytable[][20],char* ci

122、ty,int cn) //在城市數(shù)中查找某個城市</p><p>  { </p><p><b>  int i;</b></p><p>  for(i=0;i<cn;i++)</p><p><

123、b>  {</b></p><p>  if(strcmp(citytable[i],city)==0)</p><p><b>  return i;</b></p><p><b>  }</b></p><p>  return -1;</p><p>

124、;<b>  }</b></p><p>  void short_path(struct Tra* timetable,char* start,char* dest,char city[][20],int tn,int cn,int choice)//最優(yōu)路線</p><p>  {//start表示出發(fā)地,dest表示目的地,tn表示表示航班或車次的總次數(shù),cn表

125、示城市的總數(shù)</p><p>  //choice=0表示求最短時間路線,choice=1表示求最少花費(fèi)路線</p><p>  int i,j,k,st,et;</p><p>  float min,t;</p><p>  char pcity[10][20];</p><p>  float edge[15][

126、15],dist[15];</p><p>  int path[15],s[15];</p><p>  for(i=0;i<cn;i++)</p><p>  for(j=0;j<cn;j++)</p><p><b>  { </b></p><p>  edge[i][j]

127、=max;</p><p><b>  } </b></p><p>  for(i=0;i<tn;i++)/*dijkstra算法*/</p><p><b>  {</b></p><p>  j=search(city,timetable[i].start,cn);</p>

128、;<p>  k=search(city,timetable[i].destination,cn);</p><p>  if(choice==0)</p><p><b>  {/*最短時間*/</b></p><p>  t=timetable[i].time;</p><p>  if(t<ed

129、ge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {/*最少花費(fèi)*/</b></p><p>  t=timetable[i].price;</p>

130、<p>  if(t<edge[j][k]) edge[j][k]=t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  st=search(city,start,cn);</p><p>  et=search(city,dest

131、,cn);</p><p>  for(i=0;i<cn;i++){</p><p>  dist[i]=edge[st][i];</p><p><b>  s[i]=0;</b></p><p>  if(i!=st&&dist[i]<max) path[i]=st;</p>

132、<p>  else path[i]=-1;</p><p><b>  }</b></p><p>  s[st]=1; dist[st]=0;</p><p>  for(i=0;i<cn-1;i++){</p><p><b>  min=max;</b></p>

133、<p><b>  k=st;</b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&dist[j]<min)</p><p>  {k=j;min=dist[j];}</p><p><b>  s[k]=1;<

134、/b></p><p>  for(j=0;j<cn;j++)</p><p>  if(!s[j]&&edge[k][j]<max&&dist[k]+edge[k][j]<dist[j]){</p><p>  dist[j]=dist[k]+edge[k][j]; path[j]=k;</p>

135、<p><b>  }</b></p><p><b>  }</b></p><p><b>  k=et;</b></p><p><b>  i=0;</b></p><p>  if(path[k]==-1){</p>&

136、lt;p>  printf("\t\t對不起,不存在從 %s 到 %s 的路線\n\n",start,dest);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  while(path[k]!=-1)</p><p

137、><b>  {</b></p><p>  strcpy(pcity[i++],city[k]);</p><p>  k=path[k];</p><p><b>  }</b></p><p>  strcpy(pcity[i++],city[st]);</p><p

138、>  printf("\t\t最佳路線為:\n\t\t");</p><p>  for(j=i-1;j>=0;j--)</p><p>  printf("%s ",pcity[j]);</p><p>  printf("\n");</p><p>  if(cho

139、ice==0) printf("\t\t所需總時間為:%5.1f小時\n",dist[et]);</p><p>  else printf("\t\t所需的總費(fèi)用為:%7.2f元\n",dist[et]);</p><p>  printf("\n");</p><p><b>  }</

140、b></p><p>  void main ()</p><p><b>  { </b></p><p>  int i,j,k,m,n,cn=5,tn=6,fn=6;</p><p>  printf("\t\t******************************************

141、******\n");</p><p>  printf("\t\t******** 歡迎使用全國交通咨詢模擬 ********\n");</p><p>  printf("\t\t******** 黃建釗 ********\n");</p><p>  

142、printf("\t\t******** 191113 ********\n");</p><p>  printf("\t\t******** 20111000611 ********\n");</p><p>  printf("\t\t*******

143、* 計(jì)算機(jī)學(xué)院 ********\n");</p><p>  printf("\t\t******** 指導(dǎo)老師:朱曉蓮 ********\n");</p><p>  printf("\t\t********************************************

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論