2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩16頁(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><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p>  設(shè)計(jì)題目:圖的建立與輸出</p><p>  系 別: 電子與信息工程學(xué)院 </p><p>  專(zhuān) 業(yè): 電子信息工程 </p><p>  班 級(jí): 2009級(jí)(1)班 </

2、p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)教師: </p><p>  2011年 06 月 20日</p><p><b>  目錄</b></p>

3、;<p>  一、設(shè)計(jì)題目(任選其一)…………………………………………3</p><p>  二、運(yùn)行環(huán)境(軟、硬件環(huán)境)……………………………………3</p><p>  三、算法設(shè)計(jì)的思想…………………………………………………3</p><p>  四、算法的流程圖……………………………………………………3</p><p>

4、  五、算法設(shè)計(jì)分析……………………………………………………4</p><p>  六、源代碼……………………………………………………………4</p><p>  七、運(yùn)行結(jié)果分析……………………………………………………14</p><p>  八、收獲及體會(huì)………………………………………………………16</p><p>  一、設(shè)計(jì)題目(任

5、選其一)</p><p><b>  圖的建立及輸出</b></p><p>  任務(wù):建立圖的存儲(chǔ)結(jié)構(gòu)(圖的類(lèi)型可以是有向圖、無(wú)向圖、有向網(wǎng)、無(wú)向網(wǎng),學(xué)生可以任選兩種類(lèi)型),能夠輸入圖的頂點(diǎn)和邊的信息,并存儲(chǔ)到相應(yīng)存儲(chǔ)結(jié)構(gòu)中,而后輸出圖的鄰接矩陣。 </p><p>  二、運(yùn)行環(huán)境(軟、硬件環(huán)境)</p><p>&

6、lt;b>  硬件環(huán)境:</b></p><p>  CPU:1000MHz以上</p><p>  內(nèi)存:256MB以上</p><p><b>  硬盤(pán):60G以上</b></p><p><b>  軟件環(huán)境:</b></p><p>  系統(tǒng)平臺(tái):

7、Windows 2000 / Windows XP / Windows Vista / Windows 7 </p><p>  運(yùn)行環(huán)境:TC 3.0 / Microsoft Visual C++ 6.0</p><p><b>  三、算法設(shè)計(jì)的思想</b></p><p>  1、存儲(chǔ)結(jié)構(gòu);鄰接矩陣 鄰接表</p><

8、p>  2、遍歷方式:深度優(yōu)先搜索(DFS) 廣度優(yōu)先搜索(BFS) 也可以對(duì)鄰接矩陣和臨界表直接輸出:其中DFS算法通過(guò)遞歸實(shí)現(xiàn),BFS算法通過(guò)隊(duì)列實(shí)現(xiàn)。</p><p>  3、拓?fù)渑判蚝妥钚∩蓸?shù)(Prime算法),具體實(shí)現(xiàn)見(jiàn)代碼。</p><p><b>  四、算法的流程圖</b></p><p><b>  五、算法

9、設(shè)計(jì)分析</b></p><p>  首先是建圖,圖和網(wǎng)的區(qū)別在于圖沒(méi)有權(quán)值(這里以固定值1代替),網(wǎng)有權(quán)值,有向和無(wú)向在存儲(chǔ)上的區(qū)別在于對(duì)于有向圖,輸入a[i][j],只存儲(chǔ)a[i][j],而對(duì)于無(wú)向圖還要存儲(chǔ)a[j][i]。</p><p>  其次是功能的實(shí)現(xiàn),鄰接表遍歷和鄰接矩陣遍歷都很簡(jiǎn)單,按照它的存儲(chǔ)結(jié)構(gòu),依次輸出每個(gè)頂點(diǎn)和它鄰接的頂點(diǎn),時(shí)間復(fù)雜度分別為O(n+e)

10、和O(n2);</p><p>  對(duì)于DFS算法是通過(guò)函數(shù)遞歸實(shí)現(xiàn)的,所采用的存儲(chǔ)結(jié)構(gòu)式是鄰接表,找鄰接點(diǎn)所需時(shí)間為O(e),其中e為無(wú)向圖的邊數(shù)或有向圖的弧數(shù),時(shí)間復(fù)雜度為O(n+e)。</p><p>  對(duì)于BFS算法是用隊(duì)列實(shí)現(xiàn)的,每個(gè)頂點(diǎn)至多進(jìn)一次隊(duì)列。遍歷圖的過(guò)程實(shí)質(zhì)上是通過(guò)邊或弧找鄰接點(diǎn)的過(guò)程,因此廣度優(yōu)先搜索遍歷圖的時(shí)間復(fù)雜度和深度優(yōu)先搜索遍歷相同,兩者不同之處僅僅在于對(duì)

11、每個(gè)頂點(diǎn)訪問(wèn)的順序不同</p><p>  對(duì)于拓?fù)渑判?,建立各?xiàng)頂點(diǎn)的入度的時(shí)間復(fù)雜度為O(e),建零入度頂點(diǎn)棧的時(shí)間復(fù)雜度為O(n);在拓?fù)渑判蜻^(guò)程中,若有向圖無(wú)環(huán),則每個(gè)頂點(diǎn)進(jìn)一次棧,出一次棧,入度減1的操作在while語(yǔ)句中總共執(zhí)行e次,所以總的時(shí)間復(fù)雜度為O(n+e)。</p><p>  對(duì)于Prime算法的最小生成樹(shù),假設(shè)網(wǎng)中有n個(gè)頂點(diǎn),則第一個(gè)進(jìn)行初始化的循環(huán)語(yǔ)句的頻度為n

12、,第二個(gè)循環(huán)語(yǔ)句的頻度為n-1。其二是重新選擇具有最小代價(jià)的邊,其頻度為n。由此,Prime算法的時(shí)間復(fù)雜度為O(n2),與網(wǎng)中的邊數(shù)無(wú)關(guān),因此適用于求邊稠密的網(wǎng)的最小生成樹(shù)。</p><p><b>  六、源代碼 </b></p><p>  #include <stdio.h></p><p>  #include <

13、string.h></p><p>  #include <stdlib.h></p><p>  #include <ctype.h></p><p>  #include <queue></p><p>  #include <stack></p><p>  

14、#include <process.h></p><p>  using namespace std;</p><p>  #define MAX_VERTEX_NUM 20</p><p>  #define MAX 1000</p><p>  #define DG 1</p><p>  #defin

15、e DN 2</p><p>  #define UDG 3</p><p>  #define UDN 4</p><p>  //typedef enum{DG,DN,UDG,UDN} GraphKind;</p><p>  typedef char VertexType;</p><p>  typedef

16、int VRType;</p><p>  typedef char InfoType;</p><p>  struct Close {</p><p>  VertexType data;//頂點(diǎn)元素</p><p>  VRType lowcost;</p><p><b>  int j;</

17、b></p><p>  }closedge[MAX_VERTEX_NUM]; //prime算法秋最小生成樹(shù)的輔助數(shù)組</p><p>  typedef struct ArcNode{</p><p>  int adjvex;//該弧所指向的頂點(diǎn)的位置</p><p>  struct ArcNode *nextarc;/

18、/指向下一條弧的指針</p><p>  int adj;//對(duì)于無(wú)權(quán)圖為0 或1;對(duì)于帶權(quán)圖為權(quán)值</p><p>  InfoType *info;//該弧相關(guān)信息的指針</p><p>  }ArcNode,AdjMartrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//為簡(jiǎn)便起見(jiàn)鄰接矩陣的元素類(lèi)型,此時(shí)部分元素?zé)o用&l

19、t;/p><p>  typedef struct VNode{</p><p>  int outdegree,indegree;</p><p>  VertexType data;//頂點(diǎn)信息</p><p>  ArcNode *firstarc;//指向第一條依附該頂點(diǎn)的弧的指針</p><p>  }VNode

20、,AdjList[MAX_VERTEX_NUM];</p><p>  typedef struct Graph{</p><p>  AdjList vertices; //鄰接表</p><p>  AdjMartrix arcs; //鄰接矩陣</p><p>  int vexnum,arcnum; // 頂點(diǎn)個(gè)數(shù)及邊的數(shù)量

21、</p><p>  int kind; //圖的類(lèi)型</p><p><b>  }ALGraph;</b></p><p>  int cmp(const void *a,const void *b)</p><p><b>  {</b></p><p

22、>  if( *(char *)a-*(char *)b>=0)</p><p><b>  return 1;</b></p><p>  return -1;</p><p><b>  }</b></p><p>  int LocateVex(ALGraph & G,

23、VertexType e ){</p><p>  for(int i=1;i<=G.vexnum;i++)</p><p>  if(G.vertices[i].data==e) </p><p><b>  return i;</b></p><p><b>  return 0;</b>

24、</p><p><b>  } </b></p><p>  void Input_V(AdjList & ver,int n)</p><p><b>  {</b></p><p>  bool f=false;</p><p>  char str[30];&

25、lt;/p><p>  memset(str,0,sizeof(str));</p><p>  printf("輸入每個(gè)頂點(diǎn):用字母數(shù)字 如 ABCDEF 表示六個(gè)頂點(diǎn):");</p><p>  while(!f&&gets(str)){</p><p>  int len=strlen(str);&

26、lt;/p><p>  if(!len){ printf("\t\t你沒(méi)有輸入數(shù)據(jù),請(qǐng)輸入數(shù)據(jù):"); continue;}</p><p>  if(len<n){ printf("\t\t輸入長(zhǎng)度不夠,請(qǐng)重新輸入:"); continue;}</p><p>  for(int i=0;i<n;i++)</p

27、><p>  ver[i+1].data=str[i];</p><p>  for( i=0;i<len;i++)</p><p>  if(!(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z'

28、;||str[i]>='0'&&str[i]<='9'))</p><p><b>  break;</b></p><p>  if(i<len) { printf("\t\t輸入非法字符,請(qǐng)重新輸入:"); continue;}</p><p>  

29、qsort(str,len,sizeof(char),cmp);</p><p>  for(i=0;i<len-1;i++)</p><p>  if(str[i]==str[i+1]) break;</p><p>  if(i<len-1){ printf("\t\t不能有兩個(gè)相同的字符,請(qǐng)重新輸入:"); continue;

30、} </p><p><b>  f=true;</b></p><p>  memset(str,0,sizeof(str));</p><p>  //puts(str);</p><p><b>  }</b></p><p><b>  }</b>

31、;</p><p>  void initGraph( ALGraph & G) // 初始化圖 包括 輸入頂點(diǎn)和弧的數(shù)目,并初始化鄰接表的數(shù)組</p><p><b>  {</b></p><p>  int a=-1,b=-1;</p><p>  char str[23];</p>&

32、lt;p>  printf("\t\t輸入頂點(diǎn)個(gè)數(shù)和弧的個(gè)數(shù):");</p><p><b>  do{</b></p><p>  scanf("%d%d%*c",&a,&b);</p><p>  if(a==-1||b==-1) {</p><p>  

33、gets(str);</p><p>  printf("\t\t輸入不合法,請(qǐng)重新輸入:");</p><p><b>  }</b></p><p>  else break;</p><p>  }while(1);</p><p>  printf("%d %

34、d \n",a,b);</p><p>  G.vexnum=a; G.arcnum=b;</p><p>  Input_V(G.vertices,G.vexnum);</p><p>  for(int i=1;i<=G.vexnum;i++){</p><p>  //scanf("%d",&

35、;(G.vertices[i].data));// 構(gòu)造頂點(diǎn)向量</p><p>  for(int j=1;j<=G.vexnum;j++){//初始化矩陣</p><p>  G.arcs[i][j].adj=MAX;</p><p>  G.arcs[i][j].info=NULL;</p><p><b>  }&

36、lt;/b></p><p>  G.vertices[i].indegree=0;</p><p>  G.vertices[i].outdegree=0;</p><p>  G.vertices[i].firstarc=NULL;</p><p><b>  }</b></p><p>

37、;<b>  }</b></p><p>  void Input(char & v1,char & v2,int &d ,ALGraph & G)</p><p><b>  {</b></p><p>  char str[30];</p><p><b

38、>  int i;</b></p><p>  bool flag=false;</p><p>  memset(str,0,sizeof(str));</p><p>  while(!flag&&gets(str)){</p><p>  int length =strlen(str);</p&g

39、t;<p>  for(i=4;i<length;i++){</p><p>  if(!isalnum(str[0])||!isalnum(str[2])) break;</p><p>  if(str[1]!=' '||str[3]!=' ') break;</p><p>  if(!isdigit(st

40、r[i])) break;</p><p><b>  }</b></p><p>  if(length<5||i<length) { printf("存在不不合法字符或輸入格式錯(cuò)誤 請(qǐng)重新輸入\n"); continue;}</p><p>  //printf("%d %s\n",le

41、ngth,str);</p><p>  for(i=4,d=0;i<length;i++)</p><p>  d=d*10+str[i]-'0';</p><p>  if((G.kind==1||G.kind==3)&&d!=1) { printf("存在不不合法字符或輸入格式錯(cuò)誤 請(qǐng)重新輸入\n");

42、 continue;}</p><p>  v1=str[0]; v2=str[2];</p><p>  flag=true;</p><p>  memset(str,0,sizeof(str));</p><p><b>  }</b></p><p><b>  }</b&

43、gt;</p><p>  int CreateDG_DN_UDG_UDN(ALGraph & G){ // 有向圖、有向網(wǎng)、無(wú)向圖、無(wú)向網(wǎng)以及鄰接矩陣的具體實(shí)現(xiàn)</p><p>  VertexType v1,v2;</p><p>  int weight;</p><p>  int flag=G.kind;</p&

44、gt;<p>  initGraph(G);</p><p>  int tem=G.arcnum;</p><p>  printf("每條邊依附的兩個(gè)定點(diǎn)及其權(quán)值(>0),無(wú)權(quán)輸入1 如 A B 20 和 A B 1 \n");</p><p>  while(tem--){</p><p>

45、  Input(v1,v2,weight,G);</p><p>  int i=LocateVex(G,v1); // 定位v1 v2在數(shù)組中的位置</p><p>  int j=LocateVex(G,v2);</p><p>  G.arcs[i][j].adj=flag==1||flag==3?1:weight; // 建立鄰接矩陣</p>

46、;<p>  if(flag==3||flag==4){</p><p>  G.arcs[j][i].adj=flag==3?1:weight;</p><p><b>  }</b></p><p>  ArcNode * q=(ArcNode *)malloc(sizeof(ArcNode));</p><

47、;p>  q->adj=weight;</p><p>  q->adjvex=j;</p><p>  q->nextarc=NULL;</p><p>  if(G.vertices[i].outdegree==0) </p><p>  G.vertices[i].firstarc=q; </p>

48、<p><b>  else{</b></p><p>  ArcNode *p=G.vertices[i].firstarc;</p><p>  while(p->nextarc)</p><p>  p=p->nextarc;</p><p>  p->nextarc=q;</

49、p><p><b>  }</b></p><p>  if(flag==3||flag==4){ // 此if 語(yǔ)句是為創(chuàng)建無(wú)向圖 及 無(wú)向網(wǎng)準(zhǔn)備的</p><p>  ArcNode * q=(ArcNode *)malloc(sizeof(ArcNode));</p><p>  q->adj=weigh

50、t;</p><p>  q->adjvex=i;</p><p>  q->nextarc=NULL;</p><p>  if(G.vertices[j].outdegree==0&&G.vertices[j].indegree==0) </p><p>  G.vertices[j].firstarc=q;&

51、lt;/p><p><b>  else{</b></p><p>  ArcNode *p=G.vertices[j].firstarc;</p><p>  while(p->nextarc)</p><p>  p=p->nextarc;</p><p>  p->nextar

52、c=q;</p><p><b>  }</b></p><p><b>  }</b></p><p>  G.vertices[i].outdegree++;</p><p>  if(flag==3||flag==4) G.vertices[j].outdegree++;</p>

53、<p><b>  else </b></p><p>  G.vertices[j].indegree++;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b>

54、;</p><p>  void VisitDG_DN_UDG_UDN(ALGraph & G,int f){ // 遍歷鄰接表,</p><p>  ArcNode *p;</p><p><b>  if(f){</b></p><p>  printf("\t\t遍歷鄰接表 :\n");

55、</p><p>  for(int i=1;i<=G.vexnum;i++){</p><p>  p=G.vertices[i].firstarc;</p><p>  printf("\t\t與第%d個(gè)頂點(diǎn)%c鄰接頂點(diǎn)有:",i,G.vertices[i].data);</p><p><b> 

56、 while(p){</b></p><p>  printf("%c ",G.vertices[p->adjvex].data);</p><p>  p=p->nextarc;</p><p><b>  }</b></p><p>  if(G.kind==3||G.ki

57、nd==4) printf("度數(shù)為 %d ",G.vertices[i].outdegree);</p><p>  else printf("出度為 %d ,入度為 %d ",G.vertices[i].outdegree,G.vertices[i].indegree);</p><p>  printf("\n");<

58、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  printf("遍歷鄰接矩陣 :\n\t\t ");</p><p>  for(in

59、t i=1;i<=G.vexnum;i++)</p><p>  printf("%c %c",G.vertices[i].data,i==G.vexnum?'\n':' ');</p><p>  printf("\t\t─┼────────────────\n");</p><p>

60、;  //printf("─┼───────\n │\n │");</p><p>  for( i=1;i<=G.vexnum;i++){</p><p>  printf("\t\t%c │",G.vertices[i].data);</p><p>  for(int j=1;j<=G.vexnum;

61、j++)</p><p>  //printf("%5d%c",G.arcs[i][j].adj,j==G.vexnum?'\n':' ');</p><p>  if(G.arcs[i][j].adj==MAX) printf("∞ %c",j==G.vexnum?'\n':' '

62、);</p><p>  else printf("%d %c",G.arcs[i][j].adj,j==G.vexnum?'\n':' ');</p><p><b>  }</b></p><p><b>  }</b></p><p>&

63、lt;b>  }</b></p><p>  bool visit[MAX_VERTEX_NUM];//深度優(yōu)先搜索</p><p>  void DFS(ALGraph & G,int i){</p><p>  visit[i]=true; </p><p>  printf("%c ",G

64、.vertices[i].data);</p><p>  ArcNode * p;</p><p>  for(p=G.vertices[i].firstarc;p;p=p->nextarc){</p><p>  if(!visit[p->adjvex]) DFS(G,p->adjvex); </p><p>&

65、lt;b>  }</b></p><p><b>  } </b></p><p>  void DFSTraverse(ALGraph & G){ </p><p><b>  int i;</b></p><p>  printf("\t\t深度優(yōu)先搜索

66、:");</p><p>  for( i=0;i<MAX_VERTEX_NUM;i++)</p><p>  visit[i]=false;</p><p>  for( i=1;i<=G.vexnum;i++)</p><p>  if(!visit[i]) DFS(G,i); </p><p&

67、gt;<b>  }</b></p><p>  queue <int> Q;</p><p>  void BFSTraverse(ALGraph & G) //廣度優(yōu)先搜索</p><p><b>  {</b></p><p><b>  int i,j;<

68、;/b></p><p>  printf("\n\t\t廣度優(yōu)先搜索 :");</p><p>  for( i=0;i<MAX_VERTEX_NUM;i++)</p><p>  visit[i]=false;</p><p>  for(i=1;i<=G.vexnum;i++){</p>

69、<p>  if(!visit[i]){</p><p>  visit[i]=true; </p><p>  printf("%c ",G.vertices[i].data);</p><p>  Q.push(i);</p><p>  while(!Q.empty()){</p>&l

70、t;p>  j=Q.front();</p><p><b>  Q.pop();</b></p><p>  for(ArcNode *w=G.vertices[j].firstarc;w;w=w->nextarc)</p><p>  if(!visit[w->adjvex]){</p><p> 

71、 visit[w->adjvex]=true; </p><p>  printf("%c ",G.vertices[w->adjvex].data);</p><p>  Q.push(w->adjvex);</p><p><b>  }</b></p><p><b>

72、;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void MinSpanTree_PRIM(ALGraph G,VertexType u)// prim算法

73、的最小生成樹(shù)</p><p><b>  {</b></p><p>  if(G.kind!=UDN) {printf("沒(méi)有最小成樹(shù)\n");return;}</p><p>  int i,j,k;</p><p>  int mincost=0;</p><p>  p

74、rintf("\n\t\tprim算法的最小生成樹(shù) :");</p><p>  k=LocateVex(G,u);</p><p>  for(i=1;i<=G.vexnum;i++){</p><p>  closedge[i].data=G.vertices[i].data;</p><p>  closedg

75、e[i].lowcost=G.arcs[k][i].adj;</p><p>  closedge[i].j=k;</p><p><b>  }</b></p><p>  closedge[k].lowcost=0;</p><p>  for(i=1;i<=G.vexnum;i++){</p>

76、<p>  //for(k=1;k<=G.vexnum;k++)</p><p>  //printf("(%d %d) %c",closedge[k].data,closedge[k].lowcost,k==G.vexnum?'\n':' ');</p><p><b>  k=0; </b>

77、</p><p>  for(j=1;j<=G.vexnum;j++){ //選出T的下一個(gè)結(jié)點(diǎn),第k個(gè)頂點(diǎn)</p><p>  if(closedge[j].lowcost==0) continue;</p><p>  if(k==0){k=j;continue;}</p><p>  if(closedge[k].lowcos

78、t>closedge[j].lowcost) </p><p><b>  k=j;</b></p><p><b>  }</b></p><p>  //for(int t=1;t<=G.vexnum;t++)</p><p>  //printf("(%d %d %d%

79、c)\t",t,closedge[t].lowcost,closedge[t].j,t==G.vexnum?'\n':' ');</p><p>  if(k)printf("(%c %c %d) ",G.vertices[closedge[k].j].data,G.vertices[k].data,closedge[k].lowcost); //最

80、小生成樹(shù)的頂點(diǎn)向量、值、及權(quán)</p><p>  mincost+=closedge[k].lowcost;</p><p>  closedge[k].lowcost=0;</p><p>  for(j=1;j<=G.vexnum;j++)</p><p>  if(G.arcs[j][k].adj<closedge[j].l

81、owcost){</p><p>  closedge[j].data=G.vertices[j].data;</p><p>  closedge[j].lowcost=G.arcs[j][k].adj;</p><p>  closedge[j].j=k;</p><p><b>  }</b></p>

82、<p>  }printf("\n\t\t最小代價(jià)和為 :%d\n",mincost);</p><p><b>  }</b></p><p>  int TOpologicalSort(ALGraph & G)//拓?fù)渑判?lt;/p><p><b>  {</b></p>

83、;<p>  stack <int> S;</p><p>  int i,j,count=0;</p><p>  int indegree[30];</p><p>  for(i=1;i<=G.vexnum;i++)</p><p>  indegree[i]=G.vertices[i].indegree

84、;</p><p>  if(G.kind==3||G.kind==4) {printf("無(wú)向圖不能進(jìn)行拓?fù)渑判騖n");return -1;}</p><p>  printf("\n拓?fù)渑判颍?quot;);</p><p>  for(i=1;i<=G.vexnum;i++)</p><p>  i

85、f(G.vertices[i].indegree==0)S.push(i);</p><p>  while(!S.empty()){</p><p>  j=S.top(); S.pop();</p><p><b>  count++;</b></p><p>  printf("(%d %c) &quo

86、t;,j,G.vertices[j].data);</p><p>  for(ArcNode *p=G.vertices[j].firstarc;p;p=p->nextarc){</p><p>  int k=p->adjvex;</p><p>  int d=--(G.vertices[k].indegree);</p><p

87、>  if(!d)S.push(k);</p><p><b>  }</b></p><p><b>  }</b></p><p>  for(i=1;i<=G.vexnum;i++)</p><p>  G.vertices[i].indegree=indegree[i];<

88、/p><p>  if(G.vexnum==count){printf("\n"); return 1;}</p><p>  printf("失?。n");return 0;</p><p><b>  } </b></p><p>  void Choose(ALGraph

89、&G){</p><p>  int choice=G.kind;</p><p>  char str[30];</p><p><b>  do{</b></p><p>  system("cls");</p><p>  printf("\n\n\t\

90、t▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");</p><p>  printf("\t\t▌?wù)堖x擇操作:\t\t\t\t ▌\n");</p><p>  printf("\t\t▌1、用鄰接矩陣遍歷\t4、廣度優(yōu)先搜索\t ▌\n\t\t▌2、用鄰接表遍歷\t5、拓?fù)渑判騖t ▌\n");</p><p>

91、;  printf("\t\t▌3、深度優(yōu)先搜索\t6、最小生成樹(shù)\t ▌\n\t\t▌7、返回\t\t8、退出程序\t\t ▌\n");</p><p>  printf("\t\t ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲\n\n");</p><p>  printf("\t\t請(qǐng)輸入你的選擇(1-7):");</p&

92、gt;<p><b>  do{</b></p><p>  memset(str,0,sizeof(str));</p><p>  gets(str);</p><p>  if(strlen(str)>1) choice=-1;</p><p>  else if(str[0]<'

93、;1'||str[0]>'8') choice=-1;</p><p>  else choice=str[0]-'0';</p><p>  if(choice==-1) printf("\t\t輸入不合法,請(qǐng)重新輸入:");</p><p>  else break;</p><

94、;p>  }while(1);</p><p>  switch(choice){</p><p>  case 1: VisitDG_DN_UDG_UDN(G,0); break;</p><p>  case 2: VisitDG_DN_UDG_UDN(G,1); break;</p><p>  case 3: DFSTraver

95、se(G);break;</p><p>  case 4: BFSTraverse(G); break;</p><p>  case 5:TOpologicalSort(G); break;</p><p>  case 6: MinSpanTree_PRIM(G,G.vertices[1].data);break;</p><p>  

96、case 7:return;</p><p>  case 8:exit(0);</p><p><b>  }</b></p><p>  printf("\n\t\t按回車(chē)鍵繼續(xù)....."); getchar();</p><p>  }while(1);</p><p>

97、;<b>  }</b></p><p>  void Menu(ALGraph &G){</p><p>  bool f=true;</p><p>  int choice=-1;</p><p>  char str[30];</p><p><b>  do{</

98、b></p><p>  system("cls");</p><p>  printf("\n\n\t\t╔════════════════════╗\n");</p><p>  printf("\t\t║\t\t\t\t\t ║\n");</p><p>  print

99、f("\t\t║\t\t圖的建立與操作\t\t ║\n");</p><p>  printf("\t\t║\t\t\t\t\t ║\n");</p><p>  printf("\t\t╚════════════════════╝\n\n");</p><p>  printf("\t\t請(qǐng)

100、選擇建圖方式:\n");</p><p>  printf("\t\t\t1、有向圖\t2、有向網(wǎng)\n");</p><p>  printf("\t\t\t3、無(wú)向圖\t4、無(wú)向網(wǎng)\n\t\t\t5、退出\n\n");</p><p>  printf("\t\t請(qǐng)輸入你的選擇(1-5):");

101、</p><p><b>  do{</b></p><p>  memset(str,0,sizeof(str));</p><p>  gets(str);</p><p>  if(strlen(str)>1) choice=-1;</p><p>  else if(str[0

102、]<'0'||str[0]>'9') choice=-1;</p><p>  else choice=str[0]-'0';</p><p>  if(choice<1||choice>5) </p><p>  printf("\t\t你的輸入不合法,請(qǐng)重新輸入(1-5):&quo

103、t;);</p><p><b>  else</b></p><p><b>  break;</b></p><p>  }while(1);</p><p>  if(choice==5) break;</p><p><b>  else{</

104、b></p><p>  G.kind=choice;</p><p>  CreateDG_DN_UDG_UDN(G);</p><p>  system("cls");</p><p>  printf("\n\n\n\n\t\t圖已建立,按回車(chē)鍵繼續(xù)其他操作...");</p>

105、<p>  getchar();</p><p>  Choose(G);</p><p><b>  }</b></p><p>  }while(1);</p><p><b>  }</b></p><p>  int main()</p>&

106、lt;p><b>  {</b></p><p>  ALGraph G;</p><p>  printf("");</p><p><b>  Menu(G); </b></p><p><b>  return 0;</b></p>

107、<p><b>  }</b></p><p><b>  七、運(yùn)行結(jié)果分析</b></p><p>  測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果見(jiàn)以下截圖</p><p>  主界面的建立,可以自由選擇建立圖,輸入數(shù)據(jù)應(yīng)嚴(yán)格按照要求,否則,無(wú)法建立 </p><p>  鄰接矩陣的遍歷有邊輸出權(quán)值(對(duì)于網(wǎng))

108、或1(對(duì)于圖),無(wú)邊輸出無(wú)窮</p><p>  用鄰接表遍歷,依次輸出每個(gè)頂點(diǎn)的臨鄰接點(diǎn),并輸出本點(diǎn)的出度和入度</p><p>  以下四個(gè)截圖分別是深度優(yōu)先搜索、廣度優(yōu)先搜索、拓?fù)渑判蚝妥钚∩蓸?shù)的運(yùn)行結(jié)果,均用字符表示其遍歷或操作的順序</p><p><b>  其他測(cè)試數(shù)據(jù):</b></p><p><

109、b>  3</b></p><p><b>  5 8</b></p><p><b>  ABCDE</b></p><p>  D E 1 C E 1 D C 1 A E 1 B E 1 B A 1 A D 1 B C 1</p><p><b>  2

110、</b></p><p><b>  5 6</b></p><p><b>  12345</b></p><p>  1 2 1 1 3 1 2 3 1 4 5 1 5 2 1 4 3 1</p><p><b>  八、收獲及體會(huì)</b></p

111、><p>  在進(jìn)行這次課程設(shè)計(jì)的過(guò)程中,我真正學(xué)到了教科書(shū)上所沒(méi)有或者真正用到了課本上的知識(shí)。這樣,既鞏固了舊知識(shí),又掌握了新知識(shí)。所以,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是我們的重中之重,是提高我們專(zhuān)業(yè)知識(shí)與實(shí)踐相結(jié)合的重要手段。</p><p>  這次課程設(shè)計(jì),對(duì)我進(jìn)行了結(jié)構(gòu)化程序設(shè)計(jì)的初步訓(xùn)練,培養(yǎng)了我的數(shù)據(jù)抽象能力。在實(shí)際操作過(guò)程中,遇到很多問(wèn)題,通過(guò)查書(shū),上網(wǎng)查資料,最后問(wèn)老師,把問(wèn)題解決,在這個(gè)

112、過(guò)程中,把課堂上的知識(shí)很好的運(yùn)用到實(shí)際上,還通過(guò)解決問(wèn)題,學(xué)習(xí)到很多課外知識(shí),引導(dǎo)和激發(fā)我對(duì)數(shù)據(jù)結(jié)構(gòu)的興趣,同時(shí)還要培養(yǎng)我搜索分析信息、查閱幫助文檔、整理經(jīng)驗(yàn)編寫(xiě)文檔、合作交流的能力。</p><p>  課程設(shè)計(jì)中我遇見(jiàn)了一些難點(diǎn),比方說(shuō) 輸入數(shù)據(jù)時(shí)錯(cuò)誤的輸入可能就會(huì)讓程序崩潰,經(jīng)過(guò)仔細(xì)思考,查閱資料,請(qǐng)教同學(xué),最后都圓滿的解決當(dāng)然,這是我收獲比較大一點(diǎn)。除此之外,我覺(jué)得一個(gè)好程序不僅在于它的功能的實(shí)現(xiàn),更重要

溫馨提示

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