2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩7頁(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>  數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)</p><p><b>  說(shuō) 明 書</b></p><p>  2013 年12月 20 日</p><p><b>  需求分析</b></p><p>  設(shè)計(jì)內(nèi)容:給定一個(gè)地區(qū)的n個(gè)城市間的距離網(wǎng),用prim算法或kruskal算法建立最小生成

2、樹,并計(jì)算得到的最小生成樹的代價(jià)。</p><p><b>  基本要求:</b></p><p> ?。?)城市間的距離網(wǎng)采用鄰接矩陣表示,鄰接矩陣的存儲(chǔ)結(jié)構(gòu)定義采用課本中給出的定義,若兩個(gè)城市之間不存在道路,則將相應(yīng)邊的權(quán)值設(shè)為自己定義的無(wú)窮大值。要求在屏幕上顯示得到的最小生成樹中包括了哪些城市間的道路,并顯示得到的最小生成樹的代價(jià);</p><

3、;p> ?。?)表示城市間距離網(wǎng)的鄰接矩陣(要求至少6個(gè)城市,10條邊);</p><p> ?。?)最小生成樹中包括的邊及其權(quán)值,并顯示得到的最小生成樹的代價(jià)。 </p><p>  2本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)</p><p>  本程序設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)為圖。</p><p><b>  3 設(shè)計(jì)思想</b>&

4、lt;/p><p><b>  普里姆算法</b></p><p><b>  4 核心代碼</b></p><p>  int main() //主函數(shù)</p><p>  { mgraph g; vertextype u; int k; </p><p>  cre

5、ateUDN(&g); /* 生成鄰接矩陣結(jié)構(gòu)的圖 */</p><p>  printf("\nThe graph is:\n");</p><p>  print(g); /*輸出鄰接矩陣*/</p><p>  printf("input the city you want to start:

6、");</p><p>  scanf("%s",u); /* 輸入最小生成樹的起點(diǎn) */</p><p>  k=locatedvex(g,u);</p><p>  while(k==-1){</p><p>  printf("the name of the city is wrong!

7、\n");</p><p>  printf("input the city you want to start again:");</p><p>  scanf("%s",u);</p><p>  k=locatedvex(g,u);</p><p><b>  }</b

8、></p><p>  minispantree(g,u); /* 普里姆算法求最小生成樹 */</p><p><b>  }</b></p><p><b>  4 代碼</b></p><p>  #include"stdio.h"</p><p

9、>  #include"string.h"</p><p>  #define maxnum 20 /* 圖的最大頂點(diǎn)數(shù) */</p><p>  #define INFINITY 1000 /* 定義一個(gè)權(quán)值的最大值 */</p><p>  typedef char vertextype[20];

10、 /*定義城市名稱*/</p><p>  typedef struct arccell</p><p><b>  {</b></p><p>  int adj; /*弧的權(quán)值*/</p><p>  int *info; /*弧上相關(guān)信息的指針*/</p><p

11、><b>  }arccell;</b></p><p>  typedef struct array</p><p><b>  {</b></p><p>  vertextype adjvex; /*頂點(diǎn)的鄰接點(diǎn)*/</p><p>  int lowcost;

12、 /* 某頂點(diǎn)與已構(gòu)造好的部分生成樹的頂點(diǎn)之間的最小權(quán)值 */</p><p><b>  }array;</b></p><p>  typedef struct{ </p><p>  vertextype vexs[maxnum]; /*頂點(diǎn)向量*/</p><p>  arccell a

13、rcs[maxnum][maxnum]; /*鄰接矩陣*/</p><p>  int vexnum,arcnum; /*圖的頂點(diǎn)個(gè)數(shù)和弧個(gè)數(shù)*/</p><p>  array closedge[maxnum]; /* 用普里姆算法求最小生成樹時(shí)的輔助數(shù)組 */ </p><p><b>  }</b>

14、</p><p><b>  mgraph;</b></p><p>  void createUDN(mgraph *g)</p><p><b>  { </b></p><p>  /* 用鄰接矩陣構(gòu)造n個(gè)城市間的距離網(wǎng)g */</p><p>  int i,j

15、,m,n,k,a,b,c;</p><p>  vertextype x,y;</p><p>  printf("input the number of cities (at least 6 cities) :"); </p><p>  scanf("%d",&g->vexnum); /

16、* 輸入城市的個(gè)數(shù)(圖的頂點(diǎn)數(shù)) */</p><p>  printf("input the number of roads (at least 10 roads):");</p><p>  scanf("%d",&g->arcnum); /* 輸入道路的邊數(shù)(圖的邊數(shù)) */</p><p&g

17、t;  printf("input the name of %d cities :",g->vexnum);</p><p>  for(i=0;i<g->vexnum;i++)</p><p>  scanf("%s",g->vexs[i]); /* 輸入城市名稱(圖的頂點(diǎn)) */</p>&l

18、t;p>  for(m=0;m<g->vexnum;m++){</p><p>  for(n=0;n<g->vexnum;n++)</p><p>  g->arcs[m][n].adj=INFINITY;} /* 初始化鄰接矩陣 */</p><p>  for(k=0;k<g->arcnum;k++){<

19、;/p><p>  printf("input the distance of a road :");</p><p>  scanf("%s%s%d",x,y,&c); /* 輸入城市間的距離(圖中邊的起點(diǎn)和終點(diǎn)及權(quán)值) */</p><p>  a=locatedvex(*g,x);</p>&

20、lt;p>  b=locatedvex(*g,y);</p><p>  while(a==-1||b==-1){</p><p>  printf("the name of the city is wrong!\n");</p><p>  printf("input the distance of a road again :

21、");</p><p>  scanf("%s%s%d",x,y,&c); </p><p>  a=locatedvex(*g,x);</p><p>  b=locatedvex(*g,y);</p><p><b>  }</b></p><p>  g

22、->arcs[a][b].adj=c;</p><p>  g->arcs[b][a]=g->arcs[a][b];</p><p><b>  }</b></p><p><b>  }</b></p><p>  void print(mgraph g)

23、/*輸出用鄰接矩陣構(gòu)造的n個(gè)城市間距離網(wǎng)g*/</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for (i=0;i<g.vexnum;i++)</p><p>  {for(j=0;j<g.vexnum;j++)<

24、/p><p>  printf("%-4d ",g.arcs[i][j].adj);</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  voi

25、d minispantree(mgraph g,vertextype x){ /* 從第k個(gè)頂點(diǎn)出發(fā)構(gòu)造圖g的最小生成樹 */</p><p>  int i,j,t,k,sum=0;</p><p>  k=locatedvex(g,x);</p><p>  for(j=0;j<g.vexnum;j++) /*輔助數(shù)組初始化*/&

26、lt;/p><p>  if(j!=k) { g.closedge[j].lowcost=g.arcs[k][j].adj;</p><p>  strcpy(g.closedge[j].adjvex,x);</p><p>  } </p><p>  g.closedge

27、[k].lowcost=0; /* 初始,U={u} */</p><p>  for(i=1;i<g.vexnum;i++){ /* 選擇其余的G->vexnum-1個(gè)頂點(diǎn) */</p><p>  k=min(g); /* 求出生成樹的下一個(gè)頂點(diǎn) */</p><p>  print

28、f("(%s,%s) %d\n",g.closedge[k].adjvex,g.vexs[k],g.closedge[k].lowcost); /* 輸出生成樹的邊和權(quán)值 */</p><p>  sum+=g.closedge[k].lowcost; /*計(jì)算最小生成樹的代價(jià)*/</p><p>  g.closedge[k].lowcost=0;

29、 /* 第k頂點(diǎn)并入U(xiǎn)集 */</p><p>  for(t=0;t<g.vexnum;t++) /* 新頂點(diǎn)并入U(xiǎn)后,修改輔助數(shù)組*/</p><p>  if(g.arcs[k][t].adj<g.closedge[t].lowcost){</p><p>  strcpy(g.closedge[t].adjve

30、x,g.vexs[k]);</p><p>  g.closedge[t].lowcost=g.arcs[k][t].adj;</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("The shortest distance i

31、s %d\n",sum); /*輸出最小生成樹的代價(jià)*/</p><p><b>  }</b></p><p>  int min(mgraph g){ /* 在輔助數(shù)組g.closedge[i]中選擇權(quán)值最小的頂點(diǎn),并返回其位置 */</p><p>  int i,a=0,min;</p>

32、<p>  min=maxnum;</p><p>  for(i=1;i<g.vexnum;i++)</p><p>  if(g.closedge[i].lowcost<min&&g.closedge[i].lowcost!=0){</p><p><b>  a=i;</b></p>

33、<p>  min=g.closedge[i].lowcost;</p><p><b>  }</b></p><p>  return a;</p><p><b>  }</b></p><p>  int locatedvex(mgraph g,vertextype u){ /

34、*確定任一城市在距離網(wǎng)g中的位置*/</p><p><b>  int i;</b></p><p>  for(i=0;i<g.vexnum;i++)</p><p>  if(strcmp(u,g.vexs[i])==0)</p><p><b>  return i;</b></

35、p><p>  return -1;</p><p><b>  }</b></p><p>  int main()</p><p>  { mgraph g; vertextype u; int k; </p><p>  createUDN(&g); /* 生成鄰接矩陣

36、結(jié)構(gòu)的圖 */</p><p>  printf("\nThe graph is:\n");</p><p>  print(g); /*輸出鄰接矩陣*/</p><p>  printf("input the city you want to start:");</p><p> 

37、 scanf("%s",u); /* 輸入最小生成樹的起點(diǎn) */</p><p>  k=locatedvex(g,u);</p><p>  while(k==-1){</p><p>  printf("the name of the city is wrong!\n");</p><p>

38、;  printf("input the city you want to start again:");</p><p>  scanf("%s",u);</p><p>  k=locatedvex(g,u);</p><p><b>  }</b></p><p>  min

39、ispantree(g,u); /* 普里姆算法求最小生成樹 */</p><p><b>  }</b></p><p><b>  5 程序運(yùn)行結(jié)果</b></p><p><b>  8 心得體會(huì)</b></p><p>  本次課程設(shè)計(jì)我們經(jīng)歷了最短時(shí)間最繁重的設(shè)計(jì)任

40、務(wù),作為兩人組的課程設(shè)計(jì)任務(wù)難度相對(duì)來(lái)說(shuō)較大,我和我的合作伙伴盡了最大的努力來(lái)做到課程設(shè)計(jì)的要求,仍然不是很滿意最后的結(jié)果。但是,總的來(lái)說(shuō)也讓我們體會(huì)到了一些軟件開發(fā)的辛苦,有時(shí)候你確實(shí)需要在有限的時(shí)間內(nèi)來(lái)完成任務(wù)。最后本次課程任務(wù)教給我們很多,讓我們客觀的正視了自己一個(gè)學(xué)期的學(xué)習(xí)成果。我們相信自己通過這樣的任務(wù)能學(xué)到我們平時(shí)僅僅上課所學(xué)不到的知識(shí),并發(fā)現(xiàn)、體會(huì)到了一種經(jīng)過辛苦編程,糾正代碼后所獨(dú)有的快樂。也讓我們發(fā)現(xiàn)了自己對(duì)于編程所潛

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論