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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  一、問(wèn)題描述1</b></p><p>  二、需求分析與設(shè)計(jì)1</p><p>  1、 基本信息(包括頂點(diǎn)數(shù)、邊數(shù)、權(quán)值等)。1</p><p>  2、 實(shí)現(xiàn)功能(城市之間距離、最小距離、最大值等)。1</p

2、><p>  三、兩種算法比較1</p><p> ?。ㄒ唬?、普里姆(Prim)算法:1</p><p> ?。ǘ?克魯斯卡(Kruskal)算法:1</p><p>  四、 算法的設(shè)計(jì)思想1</p><p>  求圖的最小生成樹(shù)主要有兩種方法:1</p><p>  (一)、算法

3、的相同點(diǎn):1</p><p>  (二)、算法的不同點(diǎn):2</p><p><b>  六、總結(jié)4</b></p><p><b>  七 源代碼5</b></p><p><b>  最小生成樹(shù)</b></p><p><b>  一

4、、問(wèn)題描述</b></p><p>  為了解決在n個(gè)城市之間建設(shè)網(wǎng)絡(luò),但需要保證連通,求最經(jīng)濟(jì)的架設(shè)方法;因此利用了最小生成樹(shù)的兩種算法Prim算法和kruskal算法,從而來(lái)解決此問(wèn)題。</p><p><b>  二、需求分析與設(shè)計(jì)</b></p><p>  可以計(jì)算出兩城市之間的距離、可以計(jì)算出城市之間最小距離。

5、 </p><p>  基本信息(包括頂點(diǎn)數(shù)、邊數(shù)、權(quán)值等)。</p><p>  實(shí)現(xiàn)功能(城市之間距離、最小距離、最大值等)。</p><p><b>  三、兩種算法比較</b></p><p>  、普里姆(Prim)算法:</p><p>  普利姆算法的時(shí)間復(fù)雜度為O(n2),與

6、網(wǎng)中的邊數(shù)無(wú)關(guān)因此適用于求邊稠密的網(wǎng)的最小生成樹(shù)。</p><p> ?。ǘ?、 克魯斯卡(Kruskal)算法:</p><p>  克魯斯卡算法恰恰相反,它的時(shí)間復(fù)雜度為O(eloge)(e為網(wǎng)中的邊的數(shù)目)。因此它適用稀疏的網(wǎng)的最小生成樹(shù)。</p><p><b>  算法的設(shè)計(jì)思想</b></p><p>  

7、求圖的最小生成樹(shù)主要有兩種方法:</p><p><b>  1. 普里姆算法;</b></p><p><b>  2.克魯斯卡算法。</b></p><p>  (一)、算法的相同點(diǎn):</p><p>  都利用了頂點(diǎn)集U和V-U中頂點(diǎn)的最小值;都有一出發(fā)點(diǎn);每次都是選出最小的值并入U中以作為過(guò)

8、渡頂點(diǎn),而不再求其最??;都涉及最短問(wèn)題;它們都是從一個(gè)原始頂點(diǎn)開(kāi)始將頂點(diǎn)一個(gè)個(gè)按一定順序轉(zhuǎn)移到所求終點(diǎn)中都用到了輔助向量;都從頂點(diǎn)出發(fā),并在過(guò)程中都依據(jù)了頂點(diǎn);都包含其頂點(diǎn)連通分量;都是對(duì)網(wǎng)進(jìn)行操作;用找到的路徑將頂點(diǎn)連接起來(lái)都是樹(shù)。</p><p>  (二)、算法的不同點(diǎn):</p><p>  普里姆算法從頂點(diǎn)集U中任一頂點(diǎn)出發(fā)到V—U中頂點(diǎn),迪杰斯特拉算法從源點(diǎn)出發(fā)通過(guò)頂點(diǎn)U到找到V

9、—U中頂點(diǎn)的最小值;普里姆算法的出發(fā)點(diǎn)是算法的開(kāi)始點(diǎn);而迪杰斯特拉算法的出發(fā)點(diǎn)是求最短路徑的源點(diǎn);普里姆算法用lowcost數(shù)組,而迪杰斯特拉算法用D[ j ]=Min{D[ i ]|vi屬于頂點(diǎn)集V-S}普里姆算法解決最小生成樹(shù),迪杰斯特拉算法解決最短路徑;普里姆算法是順著已找到的頂點(diǎn)找其余應(yīng)并入U中的頂點(diǎn),而迪杰斯特拉算是順著頂點(diǎn)去找其余頂點(diǎn)到源點(diǎn)的最短路徑;普里姆算法的最短是兩個(gè)頂點(diǎn)集間的最短,而迪杰斯特拉算法的最短是某點(diǎn)通過(guò)一個(gè)

10、頂點(diǎn)集U到源點(diǎn)的最短。普里姆算法的最短是兩個(gè)頂點(diǎn)間的最短,而迪杰斯特拉算法的最短是某點(diǎn)到源點(diǎn)的最短。普法無(wú)需按最短的并入,它尋找并入U(xiǎn)的點(diǎn)的依據(jù)是在U和V-U之間的最短路徑。迪法在找到最短路徑后,還要對(duì)其余結(jié)點(diǎn)的當(dāng)前最短路徑進(jìn)行修改,而普法則不進(jìn)行修改。普法是從頂點(diǎn)集的思路出發(fā),而迪法則是按路徑長(zhǎng)度遞增思路出發(fā)。普法的出發(fā)點(diǎn)是任意的,而迪法的出發(fā)點(diǎn)是規(guī)定的。</p><p>  普法在執(zhí)行過(guò)程中不改變兩點(diǎn)間的權(quán)值

11、,而迪法在執(zhí)行過(guò)程中會(huì)求出一個(gè)或者是兩點(diǎn)的權(quán)值或者是權(quán)值之和作為最短的路徑;迪法具有方向性,而普法則可以不具有.</p><p><b>  系統(tǒng)測(cè)試</b></p><p>  /*建立圖的鄰接矩陣*/</p><p>  void CreatMatrix(adjmatrix GA){</p><p>  int i,

12、j,k,e;</p><p>  printf("圖中有%d個(gè)頂點(diǎn)\n",n);</p><p>  for(i=1;i<=n;i++){</p><p>  for(j=1;j<=n;j++){</p><p><b>  if(i==j){</b></p><p&g

13、t;  GA[i][j]=0; /*對(duì)角線(xiàn)的值置為0*/</p><p><b>  }</b></p><p><b>  else{</b></p><p>  GA[i][j]=MaxNum; /*其它位置的值置初始化為一個(gè)最大整數(shù)*/</p><p><b>

14、  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入邊的個(gè)數(shù):");</p><p>  scanf("%d",&arcnum);</p>

15、<p>  printf("請(qǐng)輸入邊的信息,按照起點(diǎn),終點(diǎn),權(quán)值的形式輸入:\n");</p><p>  for(k=1;k<=arcnum;k++){</p><p>  scanf("%d,%d,%d",&i,&j,&e); /*讀入邊的信息*/</p><p>  GA[i][

16、j]=e;</p><p>  GA[j][i]=e;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  測(cè)試結(jié)果:</b></p><p><b>  六、總結(jié)</b>&l

17、t;/p><p>  編程要很強(qiáng)的邏輯思維,難度很大,但通過(guò)這次的自己親自動(dòng)手完成課程設(shè)計(jì)后,我懂得難度很多時(shí)候是因?yàn)槲覀冏约合胂胨请y的。如果我們一開(kāi)始就把它想象的很難,就會(huì)有心理的一種暗示,這個(gè)我是不會(huì)完成的。但是只要我們有信心,克服這種心里的障礙就一定能編寫(xiě)一個(gè)好程序。所以心態(tài)很重要。通過(guò)這次課程設(shè)計(jì),發(fā)現(xiàn)自己對(duì)知識(shí)的掌握上還是有很多欠缺的。最主要的不足之處就是再把算法的思想用程序語(yǔ)言編寫(xiě)出來(lái),這個(gè)對(duì)我來(lái)說(shuō)有很

18、大的難度。針對(duì)這種情況可能是我平時(shí)看程序不夠多,自己練得很不夠。還有就是對(duì)于圖的存儲(chǔ)上我不是很了解,以前總是覺(jué)得圖的存儲(chǔ)有太多的方法,對(duì)于在不同種情況下該用什么樣的方法自己不太了解,對(duì)于它們的特點(diǎn)沒(méi)有深入的了解,但通過(guò)這次自己在實(shí)際當(dāng)中的練習(xí),對(duì)于它們有了更深層次的認(rèn)識(shí)。通過(guò)這次的課程設(shè)計(jì)要我們明白了,編程只有我們有信心,就一定能完成。</p><p><b>  七 源代碼</b><

19、/p><p>  #include <stdio.h></p><p>  #include<stdlib.h> </p><p>  #define n 7</p><p>  #define MaxNum 10000 /*定義一個(gè)最大整數(shù)*/</p><p>  /*定義鄰接矩陣類(lèi)型*/<

20、;/p><p>  typedef int adjmatrix[n+1][n+1]; /*0號(hào)單元沒(méi)用*/</p><p>  typedef struct{</p><p>  int fromvex,tovex;</p><p>  int weight;</p><p><b>  }Edges;<

21、;/b></p><p>  typedef Edges *EdgeNode;</p><p>  int arcnum; /*邊的個(gè)數(shù)*/</p><p>  typedef struct </p><p>  {

22、 </p><p>  char v1; </p><p>  char v2;

23、 </p><p>  int weight; </p><p>  }Edge; </p><

24、p>  typedef struct{ </p><p>  Edge space[100]; </p><p>  int Elength;

25、 </p><p>  }Headtype; </p><p>  typedef struct <

26、/p><p>  { </p><p>  char v; </p><p>  int flag;

27、 </p><p><b>  }Dgree;</b></p><p>  typedef struct{ </p><p>  Dgree biao[20];</p><p>  int Glength;</p>

28、<p><b>  }Mark;</b></p><p>  /*建立圖的鄰接矩陣*/</p><p>  void CreatMatrix(adjmatrix GA){</p><p>  int i,j,k,e;</p><p>  printf("圖中有%d個(gè)頂點(diǎn)\n",n);<

29、/p><p>  for(i=1;i<=n;i++){</p><p>  for(j=1;j<=n;j++){</p><p><b>  if(i==j){</b></p><p>  GA[i][j]=0; /*對(duì)角線(xiàn)的值置為0*/</p><p><b>

30、  }</b></p><p><b>  else{</b></p><p>  GA[i][j]=MaxNum; /*其它位置的值置初始化為一個(gè)最大整數(shù)*/</p><p><b>  }</b></p><p><b>  }</b></p>

31、<p><b>  }</b></p><p>  printf("請(qǐng)輸入邊的個(gè)數(shù):");</p><p>  scanf("%d",&arcnum);</p><p>  printf("請(qǐng)輸入邊的信息,按照起點(diǎn),終點(diǎn),權(quán)值的形式輸入:\n");</p&g

32、t;<p>  for(k=1;k<=arcnum;k++){</p><p>  scanf("%d,%d,%d",&i,&j,&e); /*讀入邊的信息*/</p><p>  GA[i][j]=e;</p><p>  GA[j][i]=e;</p><p><b&

33、gt;  }</b></p><p><b>  }</b></p><p>  /*初始化圖的邊集數(shù)組*/</p><p>  void InitEdge(EdgeNode GE,int m){</p><p><b>  int i;</b></p><p>

34、  for(i=1;i<=m;i++){</p><p>  GE[i].weight=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*根據(jù)圖的鄰接矩陣生成圖的邊集數(shù)組*/</p><p>  void Ge

35、tEdgeSet(adjmatrix GA,EdgeNode GE){</p><p>  int i,j,k=1;</p><p>  for(i=1;i<=n;i++){</p><p>  for(j=i+1;j<=n;j++){</p><p>  if(GA[i][j]!=0&&GA[i][j]!=Max

36、Num){</p><p>  GE[k].fromvex=i;</p><p>  GE[k].tovex=j;</p><p>  GE[k].weight=GA[i][j];</p><p><b>  k++;</b></p><p><b>  }</b></

37、p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*按升序排列圖的邊集數(shù)組*/</p><p>  void SortEdge(EdgeNode GE,int m){&l

38、t;/p><p>  int i,j,k;</p><p>  Edges temp;</p><p>  for(i=1;i<m;i++){</p><p><b>  k=i;</b></p><p>  for(j=i+1;j<=m;j++){</p><p>

39、;  if(GE[k].weight>GE[j].weight){</p><p><b>  k=j;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(k!=i){</b>&

40、lt;/p><p>  temp=GE[i];GE[i]=GE[k];</p><p>  GE[k]=temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

41、<p>  /*利用普里姆算法從初始點(diǎn)v出發(fā)求鄰接矩陣表示的圖的最小生成樹(shù)*/</p><p>  void Prim(adjmatrix GA,EdgeNode T){</p><p>  int i,j,k,min,u,m,w;</p><p>  Edges temp;</p><p>  /*給T賦初值,對(duì)應(yīng)為v1依次到其余

42、各頂點(diǎn)的邊*/</p><p><b>  k=1;</b></p><p>  for(i=1;i<=n;i++){</p><p><b>  if(i!=1){</b></p><p>  T[k].fromvex=1;</p><p>  T[k].tovex=

43、i;</p><p>  T[k].weight=GA[1][i];</p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*進(jìn)行n-1次循環(huán),每次求出最小生成

44、樹(shù)中的第k條邊*/</p><p>  for(k=1;k<n;k++){</p><p>  min=MaxNum;</p><p><b>  m=k;</b></p><p>  for(j=k;j<n;j++){</p><p>  if(T[j].weight<min)

45、{</p><p>  min=T[j].weight;m=j;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*把最短邊對(duì)調(diào)到k-1下標(biāo)位置*/</p><p>  temp=T[k];</p><

46、p>  T[k]=T[m];</p><p>  T[m]=temp;</p><p>  /*把新加入最小生成樹(shù)T中的頂點(diǎn)序號(hào)賦給j*/</p><p>  j=T[k].tovex;</p><p>  /*修改有關(guān)邊,使T中到T外的每一個(gè)頂點(diǎn)保持一條到目前為止最短的邊*/</p><p>  for(i=k

47、+1;i<n;i++){</p><p>  u=T[i].tovex;</p><p>  w=GA[j][u];</p><p>  if(w<T[i].weight){</p><p>  T[i].weight=w;T[i].fromvex=j;</p><p><b>  }</b

48、></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*輸出邊集數(shù)組的每條邊*/</p><p>  void OutEdge(EdgeNode GE,in

49、t e){</p><p><b>  int i;</b></p><p>  printf("按照起點(diǎn),終點(diǎn),權(quán)值的形式輸出的最小生成樹(shù)為:\n");</p><p>  for(i=1;i<=e;i++){</p><p>  printf("%d,%d,%d\n",G

50、E[i].fromvex,GE[i].tovex,GE[i].weight);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void InitMark(Mark &M,int x){</p><p><b>  int j;

51、</b></p><p>  M.Glength=x; </p><p>  printf("請(qǐng)依次輸入這些點(diǎn):"); </p><p>  for(j=1;j<=x;j++)

52、 </p><p>  { </p><p>  scanf("%s",&M.biao[j].v);

53、 </p><p>  M.biao[j].flag=-1; </p><p>  } </p><p>  }

54、 </p><p>  void InitHeadType(Headtype &H,int y){</p><p><b>  int k; </b></p><p>  H.Elength=y;

55、 </p><p>  for(k=1;k<=y;k++) </p><p>  { </p><p>  p

56、rintf("請(qǐng)輸入邊的關(guān)系:"); </p><p>  scanf("%s%s%d",&H.space[k].v1,&H.space[k].v2,&H.space[k].weight); </p><p>  }

57、 </p><p>  } </p><p>  void HeadAdjust(Headtype &H,int s,int m)

58、 </p><p>  {Edge rc; </p><p>  int p; </p>&

59、lt;p>  rc=H.space[s]; </p><p>  for(p=2*s;p<=m;p*=2) </p><p>  {

60、 </p><p>  if(p<m&&(H.space[p].weight<H.space[p+1].weight)) </p><p>  ++p;

61、 </p><p>  if(rc.weight>H.space[p].weight) </p><p>  break; </p><p>  

62、H.space[s]=H.space[p]; </p><p>  s=p; </p><p>  }

63、 </p><p>  H.space[s]=rc; </p><p>  }

64、 </p><p>  void HeadSort(Headtype &H)

65、 </p><p><b>  {int q; </b></p><p>  Edge rb; </p><p>  for(q=H.Elength/2;q>0;--q)

66、 </p><p>  HeadAdjust(H,q,H.Elength); </p><p>  for(q=H.Elength;q>1;--q) </p><p&

67、gt;  { </p><p>  rb=H.space[1]; </p><p>  H.space[1]=H.space[q];

68、 </p><p>  H.space[q]=rb; </p><p>  HeadAdjust(H,1,q-1); </p><p>

69、  } </p><p>  } </p><p>  void main()</p><p><b>  {</b></p><p><b>

70、  int q;</b></p><p><b>  do</b></p><p><b>  {</b></p><p>  printf("*******************************************************\n");</p>&l

71、t;p>  printf("1. 普里姆算法最小生成樹(shù)算法! \n");</p><p>  printf("2. 克魯斯卡爾算法最小生成樹(shù)算法! \n");</p><p>  printf("\n********************

72、*********************************\n");</p><p>  printf(" 制 作 人: 岳 忠 全 \n");</p><p>  printf(" 班 級(jí) : 網(wǎng) 絡(luò) 工 程 班

73、\n");</p><p>  printf(" 時(shí) 間 : 2013.12.24 \n"); </p><p>  printf("\n**************************************************** \n");</p>

74、;<p>  printf("\n**************** 請(qǐng)選擇要進(jìn)行的操:! ************** \n");</p><p>  scanf("%d",&q);</p><p><b>  switch(q)</b></p><p><b>  {

75、</b></p><p><b>  case 1:</b></p><p>  adjmatrix GA;</p><p>  Edges GE[n*(n-1)/2],T[n];</p><p>  CreatMatrix(GA);</p><p>  InitEdge(GE,arc

76、num);</p><p>  GetEdgeSet(GA,GE);</p><p>  SortEdge(GE,arcnum);</p><p>  Prim(GA,T);</p><p>  printf("\n");</p><p>  OutEdge(T,n-1);</p>&

77、lt;p><b>  break;</b></p><p><b>  case 2:</b></p><p>  int Gnumber,Enumber,a,b,c; </p><p>  printf("請(qǐng)輸入點(diǎn)的個(gè)數(shù):\n&q

78、uot;); </p><p>  scanf("%d",&Gnumber); </p><p>  printf("請(qǐng)輸入邊數(shù):");

79、 </p><p>  scanf("%d",&Enumber); </p><p>  Headtype H; </

80、p><p><b>  Mark M; </b></p><p>  Dgree e1,e2; </p><p>  InitMark(M,Gnumber

81、); </p><p>  InitHeadType(H,Enumber); </p><p>  HeadSort(H);

82、 </p><p>  printf("輸出最小生成樹(shù);\n"); </p><p>  for(a

83、=1;a<=Enumber;a++) </p><p>  { </p><p>  for(b=1;b<=Gnumber;b++)</p><

84、p><b>  {</b></p><p>  if(M.biao[b].v==H.space[a].v1) </p><p><b>  {</b></p><p>  e1=M.biao[b]; </p><p&g

85、t;<b>  break;</b></p><p><b>  }</b></p><p>  } </p><p>  for(c=1;c<=Gnumber;c++)</p><p>  {

86、 </p><p>  if(M.biao[c].v==H.space[a].v2) </p><p><b>  {</b></p><p>  e2=M.biao[c]; </p&

87、gt;<p><b>  break;</b></p><p><b>  } </b></p><p>  }

88、 </p><p>  while(e1.flag!=-1)</p><p><b>  {</b></p><p>  b=e1.flag; </p&

89、gt;<p>  e1=M.biao[e1.flag];</p><p>  } </p><p>  while(e2.flag!=-1)</p><p><b>  {</b></p><p>  c=e2

90、.flag; </p><p>  e2=M.biao[e2.flag]; </p><p>  } </p><p>  if(e2.v!=e1.v)</p>

91、<p><b>  { </b></p><p>  M.biao[b].flag=c; </p><p>  printf("(%c,%c):%d\n",H.space[a].v1,

92、H.space[a].v2,H.space[a].weight); </p><p><b>  }</b></p><p>  } break; </p><p><b>  }</b></p><p>  }while(q!=2);</p>&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論