公交路線查詢課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《算法與數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告</p><p>  題目: 公交線路 </p><p>  完成日期:2012 年 06 月 17 日</p><p><b>  一、課程設(shè)計(jì)目的</b></p><p>  本課程設(shè)計(jì)的目標(biāo)就是要達(dá)到理論與實(shí)際應(yīng)用相結(jié)合,提高學(xué)生組織數(shù)據(jù)及編寫大型

2、程序的能力,并培養(yǎng)基本的、良好的程序設(shè)計(jì)技能以及合作能力。</p><p>  設(shè)計(jì)中要求綜合運(yùn)用所學(xué)知識,上機(jī)解決一些與實(shí)際應(yīng)用結(jié)合緊密的、規(guī)模較大的問題,通過分析、設(shè)計(jì)、編碼、調(diào)試等各環(huán)節(jié)的訓(xùn)練,使學(xué)生深刻理解、牢固掌握數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)技術(shù),掌握分析、解決實(shí)際問題的能力?! ⊥ㄟ^這次設(shè)計(jì),要求在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面,加深對課程基本內(nèi)容的理解。同時(shí),在

3、程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。</p><p><b>  二、課程設(shè)計(jì)內(nèi)容</b></p><p>  建立某城市(如福州)主要公交線路圖</p><p><b>  查詢站點(diǎn)路線</b></p><p><b>  三、課程設(shè)計(jì)過程</

4、b></p><p><b>  [基本要求]</b></p><p>  輸入任意兩站點(diǎn),給出最佳的乘車線路和轉(zhuǎn)車地點(diǎn)。如:該城市共有n條公交線路,m個(gè)公交站點(diǎn)。其中,公交線路1經(jīng)過編號為1,2,4,7的站點(diǎn),公交線路2經(jīng)過編號為3,5,7,8,的站點(diǎn),則從站點(diǎn)2到站點(diǎn)8的最佳乘車線路是:乘坐公交線路1從站點(diǎn)2到站點(diǎn)7再乘坐公交線路2到站點(diǎn)8。</p&g

5、t;<p><b>  [測試數(shù)據(jù)]</b></p><p>  該城市共有3條公交線路,6個(gè)公交站點(diǎn),其中:</p><p>  第1條公交線路經(jīng)過站點(diǎn):1,2</p><p>  第2條公交線路經(jīng)過站點(diǎn):2,3,4</p><p>  第3條公交線路經(jīng)過站點(diǎn):4,5</p><p&g

6、t;  用圖的最短路徑算法實(shí)現(xiàn)(轉(zhuǎn)乘次數(shù)最少)</p><p><b>  2.概要設(shè)計(jì)</b></p><p>  1)為了實(shí)現(xiàn)上述程序功能,需要定義圖數(shù)據(jù)類型:</p><p>  typedef struct// 圖的定義</p><p>  {char name[MAX_VERTEX_NUM]

7、;</p><p>  int vexs[MAX_VERTEX_NUM];</p><p>  int vexnum,arcnum;// 頂點(diǎn)信息 弧的信息</p><p>  intln,l,n;//ln是路線數(shù) ,l是路線,n是站點(diǎn)數(shù),d是站點(diǎn),nu路徑數(shù) </

8、p><p>  int vexno[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//頂點(diǎn): 路線,路線中的站點(diǎn)數(shù)</p><p>  int arclin[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 弧: 站點(diǎn)-站點(diǎn),,存的是權(quán)值 </p><p>  } mgraph;  </p>&

9、lt;p><b>  基本操作:</b></p><p>  void create(mgraph &g)</p><p>  輸入路線,站點(diǎn)信息,站點(diǎn)間關(guān)系</p><p>  操作結(jié)果:創(chuàng)建公交線路圖,</p><p>  void floyd (mgraph g,int v,int w)</p

10、><p>  計(jì)算最少換乘路徑。并輸出,且相應(yīng)查找各所需換乘車信息,并計(jì)算換乘次數(shù)</p><p>  操作結(jié)果:顯示所查詢站的路線,換乘車次,及換乘最少路徑</p><p><b>  Menu()</b></p><p>  操作結(jié)果:在屏幕上顯示操作菜單</p><p>  void visit

11、(mgraph g,int v,int w)</p><p><b>  查找站點(diǎn)信息并輸出</b></p><p>  操作結(jié)果:輸出所查詢站點(diǎn)信息</p><p>  int main()</p><p>  有個(gè)switch,可以對Menu里的功能進(jìn)行選擇操作,</p><p>  操作結(jié)果

12、:各個(gè)其他函數(shù)進(jìn)行實(shí)現(xiàn)</p><p>  2)本程序包含5個(gè)函數(shù):</p><p> ?、?主函數(shù)main()</p><p>  ② 建設(shè)公交圖函數(shù)void create(mgraph &g)</p><p> ?、?顯示操作菜單函數(shù)menu()</p><p> ?、?計(jì)算最小路徑算法函數(shù)void fl

13、oyd (mgraph g,int v,int w)</p><p> ?、?查找顯示站點(diǎn)信息的函數(shù)void visit(mgraph g,int v,int w)</p><p><b>  各函數(shù)間關(guān)系如下:</b></p><p><b>  mean</b></p><p>  Main

14、 craete</p><p><b>  floyd</b></p><p><b>  visit</b></p><p><b>  3.詳細(xì)設(shè)計(jì)</b></p><p>  實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有的數(shù)據(jù)類型,對每個(gè)操

15、作給出偽碼算法。對主程序和其他模塊也都需要寫出偽碼算法。</p><p><b>  1) 圖的定義 </b></p><p>  typedef struct</p><p>  {char name[MAX_VERTEX_NUM];</p><p>  int vexs[MAX_VERTEX_NU

16、M];</p><p>  int vexnum,arcnum;</p><p>  intln,l,n;</p><p>  int vexno[MAX_VERTEX_NUM][MAX_VERTEX_NUM];</p><p>  int arclin[MAX_VERTEX_NUM]

17、[MAX_VERTEX_NUM];} mgraph;</p><p>  2) 公交路線建設(shè)到查詢的基本操作</p><p><b>  建圖::  </b></p><p>  void create(mgraph &g)</p><p>  {int i,j,k,e,d;</p>

18、<p>  printf("請輸入公交站數(shù)和路徑數(shù):");</p><p>  scanf("%d,%d,",&g.vexnum,&g.arcnum);</p><p>  printf("請輸入公交站點(diǎn)和其站名:");</p><p>  for (d=1;d<=

19、g.vexnum;d++)</p><p>  scanf("%d,%c",&g.vexs[d],&g.name[d]);</p><p>  for(i=1;i<=g.vexnum;i++)</p><p>  for(j=1;j<=g.vexnum;j++)</p><p>  g.arcl

20、in[i][j]=infi;</p><p>  printf("請輸入可達(dá)兩站點(diǎn)的編號:\n");</p><p>  for(k=1;k<=g.arcnum;k++)</p><p><b>  {</b></p><p>  scanf("%d,%d",&i,&

21、amp;j);</p><p>  g.arclin[i][j]=1;</p><p>  g.arclin[j][i]=1;</p><p><b>  }</b></p><p>  printf("請輸入公交路線數(shù):");</p><p>  scanf("%d

22、",&g.ln);</p><p>  for (k=1;k<=g.ln;k++)</p><p>  {printf("請輸入路線和所含站點(diǎn)數(shù):");</p><p>  scanf("%d,%d",&g.l,&g.n);</p><p>  pr

23、intf("請輸入此路線的所含站點(diǎn):");</p><p>  for (e=1;e<=g.n;e++)</p><p><b>  {</b></p><p>  scanf("%d",&j);</p><p>  if(j<infi)</p>

24、<p>  g.vexno[g.l][j]=g.l;}}</p><p><b>  }</b></p><p>  Floyd 算法:求最少換乘路徑:</p><p>  void floyd (mgraph g,int v,int w)//floyd算法算出各點(diǎn)間的最小路徑</p><p>  {Int p

25、ath[MAX_VERTEX_NUM][MAX_VERTEX_NUM],a[MAX_VERTEX_NUM],b[MAX_VERTEX_NUM]; </p><p>  int i,j,k,/*u,temp,*/top=0,top1=0;</p><p>  for(i=1;i<=g.vexnum;i++)</p><p>  for(j=1;j&

26、lt;=g.vexnum;j++)</p><p><b>  {if(i==j)</b></p><p>  path[i][j]=0;</p><p>  elseif(g.arclin[i][j]<infi)</p><p>  path[i][j]=i;</p><p><b&

27、gt;  else</b></p><p>  path[i][j]=0;}</p><p>  for(k=1;k<=g.vexnum;k++)</p><p>  for(i=1;i<=g.vexnum;i++)</p><p>  for(j=1;j<=g.vexnum;j++)</p>&l

28、t;p>  if(g.arclin[i][k]+g.arclin[k][j]<g.arclin[i][j])</p><p>  {g.arclin[i][j]=g.arclin[i][k]+g.arclin[k][j];</p><p>  path[i][j]=path[k][j];} </p><p>  //計(jì)算結(jié)束,開始判斷輸出所要了解的信息&

29、lt;/p><p>  if(path[v][w]==v)</p><p>  {printf("%d-->%d\n",v,w);</p><p>  for (i=1;i<=MAX_VERTEX_NUM;i++)</p><p>  { if (i==g.vexno[i][v]&&i==g.ve

30、xno[i][w])</p><p>  printf("您只需要乘坐く%d路つ車,此兩站能有直達(dá)車!\n\n",g.vexno[i][v]);}}</p><p>  Else if(path[v][w])</p><p><b>  {int f=0;</b></p><p>  printf(

31、"%d",v);</p><p>  a[++top]=w;</p><p>  b[++top1]=w;</p><p>  while(path[v][w]!=v)</p><p>  {k=path[v][w];</p><p>  a[++top]=k;</p><p&g

32、t;  b[++top1]=k;</p><p><b>  w=k;}</b></p><p>  while(top)</p><p>  {++f;int u=a[top--];</p><p>  printf("-->");</p><p>  printf(

33、"%d",u);}</p><p>  for (i=1;i<=MAX_VERTEX_NUM;i++)</p><p>  if (i==g.vexno[i][v]&&i==g.vexno[i][b[top1]])</p><p>  //用判斷兩站點(diǎn)所在的路線是否同一條,若同一條,則輸出這條路線</p>&l

34、t;p>  printf("\n這兩站沒有直達(dá)車,您需要乘坐公交路線為:く%d路",g.vexno[i][v]);</p><p>  while(top1-1)</p><p>  {int t=b[top1];</p><p>  for (i=1;i<=MAX_VERTEX_NUM;i++)</p><p&

35、gt;<b>  { </b></p><p>  if (i==g.vexno[i][t+1]&&g.vexno[i][t])</p><p>  printf("-%d路つ",i);</p><p><b>  }</b></p><p><b> 

36、 --top1;</b></p><p><b>  }</b></p><p>  printf("\n");</p><p>  printf("您需要轉(zhuǎn)乘次數(shù)為:%d次!\n\n",f);</p><p>  printf("\n");<

37、/p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("此倆站點(diǎn)不存在通車路徑!!請做其它操作,謝謝!\n\n");</p><p><b>  }</b></p><p>

38、  void visit(mgraph g,int v,int w)//對于站點(diǎn)的信息的輸出</p><p>  {for(int i=1;i<=g.vexnum ;i++)</p><p>  for (int j=1;j<=g.vexnum;j++)</p><p>  {if(i==v&&j==w)</p><p

39、>  {printf("此兩站點(diǎn)信息為:");</p><p>  printf("%c,%c\n",g.name[i],g.name[j]);}} printf("最少換乘路徑為:");</p><p><b>  } </b></p><p><b>  功能選擇菜

40、單::</b></p><p>  void menu()</p><p>  {printf("#################ぃぃぃ1: 建 設(shè) 公 交 線 路 圖 !ぃぃぃ#################\n");</p><p>  printf("#################ぃぃぃ2:查詢您所需要了解的線

41、路!ぃぃぃ#################\n");</p><p>  printf("#################ぃぃぃ3: 退 出 !ぃぃぃ#################\n");</p><p><b>  }</b></p><p><b>  4.調(diào)試

42、分析</b></p><p>  在調(diào)試的過程中會出現(xiàn)括號的缺失,或者是功能的不可行,最大難題就是路線方面,經(jīng)過調(diào)試,檢查語句合法與否,實(shí)現(xiàn)功能的程序是否符合邏輯,一步步完善直到實(shí)現(xiàn)要求的所有功能。</p><p><b>  5.用戶使用說明</b></p><p>  程序名為bus.exe,運(yùn)行環(huán)境為DOS。程序執(zhí)行后顯示&l

43、t;/p><p>  在輸入序號后輸入數(shù)字選擇執(zhí)行不同的功能。要求首先先建設(shè)公交線路圖,在建完圖之后會用矩陣輸出你所以建設(shè)的信息。每執(zhí)行一次功能,就會顯示執(zhí)行的結(jié)果,有包含所以需要查詢的站點(diǎn)信息,最少換乘路線,及所以需要搭乘的車路。</p><p>  選擇1:顯示“首先請先建設(shè)公交線路圖:” ,</p><p>  要求輸入站點(diǎn)個(gè)數(shù),通車路徑數(shù),站點(diǎn)信息,各站點(diǎn)間的關(guān)

44、系,公車線路數(shù),每條公車線路所以含站點(diǎn)。</p><p>  選擇2:顯示“請輸入待查任意兩個(gè)站點(diǎn)v和w: ” ,</p><p>  要求輸入等查詢的兩個(gè)兩個(gè)站點(diǎn)編號,執(zhí)行并輸出有關(guān)站點(diǎn),路徑,換乘信息</p><p>  選擇3:顯示“是否繼續(xù)?Y(請輸入1),N(請輸入0)\n” ,</p><p>  要求輸入1或0,1可以繼續(xù),0

45、可以退出并結(jié)束運(yùn)行</p><p><b>  6.測試結(jié)果</b></p><p>  程序名為Bus.exe,運(yùn)行環(huán)境為DOS。程序執(zhí)行后顯示</p><p>  在輸入序號后輸入數(shù)字選擇執(zhí)行不同的功能。要求首先先建設(shè)公交線路圖,在建完圖之后會用矩陣輸出你所以建設(shè)的信息。每執(zhí)行一次功能,就會顯示執(zhí)行的結(jié)果,有包含所以需要查詢的站點(diǎn)信息,最少

46、換乘路線,及所以需要搭乘的車路。</p><p><b>  選擇1:建圖</b></p><p><b>  選擇2:查詢</b></p><p><b>  有直達(dá)車:</b></p><p><b>  沒有通車</b></p><

47、;p><b>  有路線且需要轉(zhuǎn)車。</b></p><p>  要求輸入兩個(gè)站點(diǎn)編號,經(jīng)過FLOYD計(jì)算后,輸出兩站點(diǎn)信息,并輸出最少換乘路線及換乘的公交。</p><p><b>  選擇3:退出程序</b></p><p><b>  7.附錄</b></p><p&g

48、t;  #include <stdio.h></p><p>  #include <string></p><p>  #define MAX_VERTEX_NUM 100</p><p>  int visited[MAX_VERTEX_NUM];//訪問標(biāo)志數(shù)組</p><p>  #define infi 9

49、999</p><p>  // typedef struct</p><p><b>  // {</b></p><p><b>  // int </b></p><p>  // char name[30];</p><p><b>  // };&l

50、t;/b></p><p>  typedef struct// 圖的定義</p><p>  {char name[MAX_VERTEX_NUM];</p><p>  int vexs[MAX_VERTEX_NUM];</p><p>  int vexnum,arcnum;

51、// 頂點(diǎn)信息 弧的信息</p><p>  intln,l,n;//ln是路線數(shù) ,l是路線,n是站點(diǎn)數(shù),d是站點(diǎn),nu路徑數(shù) </p><p>  int vexno[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//頂點(diǎn): 路線,路線中的站點(diǎn)數(shù)</p><p>  int arcli

52、n[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 弧: 站點(diǎn)-站點(diǎn),,存的是權(quán)值 </p><p><b>  } mgraph;</b></p><p>  void create(mgraph &g)//輸出鄰接矩陣g</p><p><b>  {</b&

53、gt;</p><p>  int i,j,k,e,d;//k為循環(huán)變量,e為內(nèi)循環(huán)的變量,i,j為路線,站點(diǎn)變量</p><p>  printf("請輸入公交站數(shù)和路徑數(shù):");</p><p>  scanf("%d,%d,",&g.vexnum,&g.arcnum);</p&

54、gt;<p>  printf("請輸入公交站點(diǎn)和其站名:");</p><p>  for (d=1;d<=g.vexnum;d++)</p><p>  scanf("%d,%c",&g.vexs[d],&g.name[d]);</p><p>  /*printf("g:%

55、c",g.name[d]);*/</p><p>  for(i=1;i<=g.vexnum;i++)</p><p>  for(j=1;j<=g.vexnum;j++)</p><p>  g.arclin[i][j]=infi;</p><p>  printf("請輸入可達(dá)兩站點(diǎn)的編號:\n"

56、);</p><p>  for(k=1;k<=g.arcnum;k++)</p><p><b>  {</b></p><p>  scanf("%d,%d",&i,&j);</p><p>  g.arclin[i][j]=1;</p><p>  

57、g.arclin[j][i]=1;</p><p><b>  }</b></p><p>  printf("請輸入公交路線數(shù):");</p><p>  scanf("%d",&g.ln);</p><p>  /*printf("\n%d\n",

58、ln);*/</p><p>  for (k=1;k<=g.ln;k++)//建立線路與站點(diǎn)的關(guān)系</p><p>  {printf("請輸入路線和所含站點(diǎn)數(shù):");</p><p>  scanf("%d,%d",&g.l,&g.n);</p><p>  pr

59、intf("請輸入此路線的所含站點(diǎn):");</p><p>  for (e=1;e<=g.n;e++)</p><p><b>  {</b></p><p>  scanf("%d",&j);</p><p>  if(j<infi)</p>

60、<p>  g.vexno[g.l][j]=g.l;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void floyd (mgraph g,int v,int w)//fl

61、oyd算法算出各點(diǎn)間的最小路徑</p><p><b>  {</b></p><p>  int path[MAX_VERTEX_NUM][MAX_VERTEX_NUM],a[MAX_VERTEX_NUM],b[MAX_VERTEX_NUM];//a[]對于輸出路徑用來暫存路經(jīng)站點(diǎn),b[]對于公交線路輸出用來暫存公交路線前一序號站點(diǎn)</p><p

62、>  int i,j,k,/*u,temp,*/top=0,top1=0;</p><p>  for(i=1;i<=g.vexnum;i++)</p><p>  for(j=1;j<=g.vexnum;j++)</p><p><b>  {if(i==j)</b></p><p>  path[i

63、][j]=0;</p><p><b>  else</b></p><p>  if(g.arclin[i][j]<infi)</p><p>  path[i][j]=i;</p><p><b>  else</b></p><p>  path[i][j]=0;

64、</p><p><b>  }</b></p><p>  for(k=1;k<=g.vexnum;k++)</p><p>  for(i=1;i<=g.vexnum;i++)</p><p>  for(j=1;j<=g.vexnum;j++)</p><p>  if(g

65、.arclin[i][k]+g.arclin[k][j]<g.arclin[i][j])</p><p>  {g.arclin[i][j]=g.arclin[i][k]+g.arclin[k][j];</p><p>  path[i][j]=path[k][j];</p><p><b>  } </b></p><

66、;p>  //計(jì)算結(jié)束,開始判斷輸出所要了解的信息</p><p>  if(path[v][w]==v)</p><p><b>  {</b></p><p>  printf("%d-->%d\n",v,w);</p><p>  for (i=1;i<=MAX_VERTEX_

67、NUM;i++)</p><p><b>  { </b></p><p>  if (i==g.vexno[i][v]&&i==g.vexno[i][w])</p><p><b>  {</b></p><p>  printf("您只需要乘坐く%d路つ車,此兩站能有

68、直達(dá)車!\n\n",g.vexno[i][v]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><

69、;p>  if(path[v][w])</p><p><b>  {</b></p><p><b>  int f=0;</b></p><p>  printf("%d",v);</p><p>  a[++top]=w;</p><p> 

70、 b[++top1]=w;</p><p>  while(path[v][w]!=v)</p><p><b>  {</b></p><p>  k=path[v][w];</p><p>  a[++top]=k;</p><p>  b[++top1]=k;</p><

71、p><b>  w=k;</b></p><p><b>  }</b></p><p>  while(top)</p><p><b>  {</b></p><p>  ++f;int u=a[top--];</p><p>  print

72、f("-->");</p><p>  printf("%d",u);</p><p><b>  }</b></p><p>  for (i=1;i<=MAX_VERTEX_NUM;i++)</p><p>  if (i==g.vexno[i][v]&&a

73、mp;i==g.vexno[i][b[top1]])//用判斷兩站點(diǎn)所在的路線是否同一條,若同一條,則輸出這條路線</p><p>  printf("\n這兩站沒有直達(dá)車,您需要乘坐公交路線為:く%d路",g.vexno[i][v]);</p><p>  while(top1-1)</p><p>  {int t=b[top1];<

74、/p><p>  for (i=1;i<=MAX_VERTEX_NUM;i++)</p><p><b>  { </b></p><p>  if (i==g.vexno[i][t+1]&&g.vexno[i][t])</p><p>  printf("-%d路つ",i);<

75、;/p><p><b>  }</b></p><p><b>  --top1;</b></p><p><b>  }</b></p><p>  printf("\n");</p><p>  printf("您需要轉(zhuǎn)乘次

76、數(shù)為:%d次!\n\n",f);</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("此倆站點(diǎn)不存在通車路徑!!請做其它操作,謝謝!\n\n&

77、quot;);</p><p><b>  }</b></p><p>  void visit(mgraph g,int v,int w)//對于站點(diǎn)的信息的輸出</p><p>  {// string a="福建工程學(xué)院(鱔溪)",b="程浦頭(學(xué)生街)" ,c="大學(xué)城(福建中醫(yī)藥大學(xué)

78、)",d="火車站(北)", e="汽車站(南)",f="下院(鼓山)";</p><p>  for(int i=1;i<=g.vexnum ;i++)</p><p>  for (int j=1;j<=g.vexnum;j++)</p><p><b>  {</

79、b></p><p>  if(i==v&&j==w)</p><p><b>  {</b></p><p>  printf("此兩站點(diǎn)信息為:");</p><p>  printf("%c,%c\n",g.name[i],g.name[j]);<

80、/p><p><b>  }</b></p><p>  }/*printf("您需要乘公交車為%d路車\n",);*/</p><p>  printf("最少換乘路徑為:");</p><p><b>  } </b></p><p&

81、gt;  void menu()</p><p><b>  {</b></p><p>  printf("#################ぃぃぃ1: 建 設(shè) 公 交 線 路 圖 !ぃぃぃ#################\n");</p><p>  printf("#################ぃぃぃ2

82、:查詢您所需要了解的線路!ぃぃぃ#################\n");</p><p>  printf("#################ぃぃぃ3: 退 出 !ぃぃぃ#################\n");</p><p><b>  }</b></p><p>  in

83、t main()</p><p>  {printf("------*********------ぃ軟工03班41號簡歡您迎來到本界面ぃ------*********------\n");</p><p>  mgraph g;int w,v,i,j;</p><p><b>  int a;</b></p>

84、<p>  int choice=1;</p><p>  while(choice)</p><p><b>  {</b></p><p><b>  menu();</b></p><p>  printf("請輸入需要操作的序號(1-3): ");</

85、p><p>  scanf("%d",&a);</p><p><b>  switch(a)</b></p><p><b>  { </b></p><p><b>  case 1: </b></p><p>  fflu

86、sh(stdin);</p><p>  printf("首先請先建設(shè)公交線路圖:\n");</p><p>  create(g);</p><p>  printf("ぃぃぃぃぃぃぃぃぃぃ交通車情況表示如下矩陣圖ぃぃぃぃぃぃぃぃぃぃぃぃ\n");//輸出用于建線路存放的矩陣</p><p>  f

87、or(i=1;i<=g.vexnum;i++)</p><p><b>  {</b></p><p>  for(j=1;j<=g.vexnum;j++)</p><p><b>  {</b></p><p>  if (g.arclin[i][j]==infi)</p>

88、<p>  printf("%s ","*"); //表示兩站點(diǎn)間不可達(dá)</p><p><b>  else</b></p><p>  printf("%d ",g.arclin[i][j]);</p><p><b>  }</b><

89、;/p><p>  printf("\n");</p><p><b>  } </b></p><p>  printf("1代表通車,*代表不通車!\n");//向運(yùn)行者注釋矩陣中數(shù)據(jù)所表示的信息</p><p>  printf("公交線路圖建成功!!\n\n"

90、;);</p><p><b>  break;</b></p><p>  case 2:</p><p>  printf("請輸入待查任意兩個(gè)站點(diǎn)v和w: ");</p><p>  scanf("%d,%d",&v, &w);</p>

91、<p>  visit(g,v,w);</p><p>  floyd (g,v,w);</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  printf("是否繼續(xù)?Y(請輸入1),N(請輸入0)\n&qu

92、ot;);</p><p>  scanf("%d",&choice); </p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("輸入錯(cuò)誤,請重新輸入:\n");&l

93、t;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("------********-------ぃぃぃ41號^祝您生活愉快^^^^再見!ぃぃぃ-------*

94、*******------\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  四、課程設(shè)計(jì)體會</b></p><p>  在設(shè)計(jì)過程中,有興奮有心酸,開始基本的功能是建設(shè)公交路線圖及

95、最少換乘路徑(Floyd算法)及整個(gè)界面完成的得相對輕松,但添加入輸出A站到達(dá)B站所需要換乘的車(也就是路線),涉及到對存儲路線和站點(diǎn)的二維數(shù)組與對輸出的判斷聯(lián)系,最后通過老師的提示及對同學(xué)的請教,反復(fù)的調(diào)試修改成功了,主要是先輸出初始乘車的公車路線,再用棧的思想對中間站點(diǎn)所在的路線進(jìn)行比較判斷,可以理解為:a至d,中間需要經(jīng)過b,1路公車經(jīng)過a,b,2路公車b,c,d那是判斷b,d是否在同一公交路線上。b,d都在2路公車上,所以a-d

96、最少換乘路徑為:a-b-d;換乘路線為:1-2;對于換乘次數(shù),也是相對的思想,用一個(gè)變量f進(jìn)行自加累計(jì),每換乘一次f便自加一次,循環(huán)結(jié)束時(shí)輸出f即可。先前我嘗試也過迪克斯拉算法求最少換乘路徑,兩種方法都能運(yùn)行也達(dá)到。</p><p>  在整個(gè)課程設(shè)計(jì)時(shí)犯了個(gè)錯(cuò),在沒有整理好整個(gè)構(gòu)造步驟就急著開始寫程序,以至于,每添加一個(gè)功能因沒能跟上文建立關(guān)系導(dǎo)致無法實(shí)現(xiàn)調(diào)用,便需要修改一次前后,通過這次程序的編譯,掌握對程序

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論