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

下載本文檔

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

文檔簡介

1、<p>  算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p>  系 (院): 計(jì)算機(jī)科學(xué)學(xué)院 </p><p>  專業(yè)班級(jí): </p><p>  姓 名: </p><p&g

2、t;  學(xué) 號(hào): </p><p>  指導(dǎo)教師: </p><p>  設(shè)計(jì)時(shí)間: </p><p>  設(shè)計(jì)地點(diǎn):

3、 </p><p><b>  目錄</b></p><p>  設(shè)計(jì)方案及實(shí)現(xiàn)過程******************第3頁</p><p>  實(shí)現(xiàn)代碼***********************************第4頁</p><p>  測試********************************

4、**********第19頁</p><p>  難點(diǎn)與收獲********************************第21頁</p><p><b>  設(shè)計(jì)方案及實(shí)現(xiàn)過程</b></p><p>  這次課程設(shè)計(jì)要求實(shí)現(xiàn)無向圖、有向圖、無向網(wǎng)以及有向網(wǎng)的一些基本操作以及應(yīng)用,大體的方案是先進(jìn)入界面后,選擇無向圖、有向圖、無向網(wǎng)、無向網(wǎng)

5、中的一個(gè),然后創(chuàng)建相應(yīng)的圖或者網(wǎng),創(chuàng)建好后,在此基礎(chǔ)上選擇進(jìn)行相關(guān)的操作,具體的函數(shù)放在main函數(shù)前面,通過多次函數(shù)調(diào)用已達(dá)到具體操作的實(shí)現(xiàn)。</p><p><b>  流程圖如下:</b></p><p><b>  實(shí)現(xiàn)代碼</b></p><p>  #include<stdio.h></p&g

6、t;<p>  # include <stdlib.h></p><p>  # define maxlen 10</p><p>  # define large 999</p><p>  # define true 1</p><p>  # define false 0</p><p>

7、;  # define ok 1</p><p>  # define error 0</p><p>  # define overflow -2</p><p>  # define null 0</p><p>  typedef int status;</p><p>  #include <ctype.

8、h></p><p>  #include <string.h></p><p>  #include <queue></p><p>  #include <stack></p><p>  #include <process.h></p><p>  using

9、 namespace std;</p><p>  #define MAX_VERTEX_NUM 20</p><p>  #define MAX 1000</p><p>  typedef struct{</p><p>  int a[maxlen],b[maxlen],h[maxlen];</p><p>  

10、char vexs[maxlen];</p><p>  int vexnum,arcnum;</p><p><b>  int kind;</b></p><p>  int arcs[maxlen][maxlen];</p><p><b>  }graph;</b></p>&

11、lt;p>  typedef struct node{</p><p>  int adjvex;</p><p><b>  int info;</b></p><p>  struct node *next;</p><p>  }edgenode;</p><p>  typedef

12、struct{</p><p><b>  int id;</b></p><p>  char data;</p><p>  edgenode *link;</p><p>  }vexnode; </p><p>  typedef struct{</p><p> 

13、 vexnode adjs[maxlen];</p><p>  int vexnum,arcnum;</p><p><b>  int kind;</b></p><p><b>  }adjlist;</b></p><p>  typedef struct qnode{</p>

14、<p><b>  int data;</b></p><p>  struct qnode *next;</p><p>  }linkqlist; </p><p>  typedef struct</p><p>  {linkqlist *front;</p><p>  li

15、nkqlist *rear;</p><p>  } linkqueue;</p><p>  typedef struct</p><p>  {int stack[maxlen];</p><p><b>  int top;</b></p><p>  }stackstru;</p&g

16、t;<p>  int cnull=-1;</p><p><b>  graph g;</b></p><p>  adjlist adjl;</p><p>  stackstru *t;</p><p>  stackstru *s;</p><p>  linkqueue *

17、q;</p><p>  graph printf_adjmatrix(graph g){</p><p><b>  int i,j;</b></p><p>  printf("鄰接矩陣:\n");</p><p>  printf("vertex\t");</p>

18、<p>  for (i=0;i<g.vexnum;i++) printf("%4c",g.vexs[i]);</p><p>  printf("\n");</p><p>  for(i=0;i<g.vexnum;i++){</p><p>  printf("% 4c \t"

19、,g.vexs[i]);</p><p>  for(j=0;j<g.vexnum;j++) printf("%4d",g.arcs[i][j]);</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  

20、return g;</b></p><p><b>  }</b></p><p>  void create_2(graph g){ //構(gòu)造有向圖</p><p>  int i,j,k,c=0;</p><p>  for (i=0;i<g.vexnum;i++)</p><

21、p>  for(j=0;j<g.vexnum;j++)</p><p>  g.arcs[i][j]=c;</p><p>  for(k=0;k<g.arcnum;k++)</p><p>  g.arcs[g.a[k]-1][g.b[k]-1]=1;</p><p>  printf_adjmatrix(g);</

22、p><p><b>  }</b></p><p>  void create_1(graph g){ //構(gòu)造無向圖</p><p>  int i,j,k,c=0;</p><p>  for (i=0;i<g.vexnum;i++)</p><p>  for(j=0;j<g.ve

23、xnum;j++)</p><p>  g.arcs[i][j]=c;</p><p>  for(k=0;k<g.arcnum;k++){</p><p>  g.arcs[g.a[k]-1][g.b[k]-1]=1;</p><p>  g.arcs[g.b[k]-1][g.a[k]-1]=1;</p><p&g

24、t;<b>  }</b></p><p>  printf_adjmatrix(g);</p><p><b>  }</b></p><p>  graph create_4(graph g){ //構(gòu)造有向網(wǎng)</p><p>  int i,j,k,c=999;</p><

25、;p>  for (i=0;i<g.vexnum;i++)</p><p>  for(j=0;j<g.vexnum;j++)</p><p>  g.arcs[i][j]=c;</p><p>  for(k=0;k<g.arcnum;k++)</p><p>  g.arcs[g.a[k]-1][g.b[k]-1]

26、=g.h[k];</p><p>  printf_adjmatrix(g);</p><p><b>  return g;</b></p><p><b>  }</b></p><p>  graph create_3(graph g){ //構(gòu)造無向網(wǎng)</p><p&

27、gt;  int i,j,k,c=999;</p><p>  for (i=0;i<g.vexnum;i++)</p><p>  for(j=0;j<g.vexnum;j++)</p><p>  g.arcs[i][j]=c;</p><p>  for (k=0;k<g.arcnum;k++){</p>

28、<p>  g.arcs[g.a[k]-1][g.b[k]-1]=g.h[k];</p><p>  g.arcs[g.b[k]-1][g.a[k]-1]=g.h[k];</p><p><b>  }</b></p><p>  printf_adjmatrix(g);</p><p><b> 

29、 return g;</b></p><p><b>  }</b></p><p>  void creategraph(graph g){</p><p>  switch(g.kind){</p><p>  case 1:create_1(g);break;</p><p> 

30、 case 2:create_2(g);break;</p><p>  case 3:create_3(g);break;</p><p>  case 4:create_4(g);break;</p><p>  default:printf("Error\n");</p><p><b>  }</b

31、></p><p><b>  }</b></p><p>  adjlist createlist (graph g ,adjlist adjl){ //創(chuàng)建鄰接表</p><p><b>  int i;</b></p><p>  edgenode *p;</p><

32、;p>  if(g.kind==1||g.kind==3){//創(chuàng)建有向鄰接表</p><p>  for(i=0;i<adjl.arcnum;i++){</p><p>  p=(edgenode*)malloc(sizeof(edgenode));</p><p>  p->adjvex=g.b[i];</p><p>

33、  p->info=g.h[i];</p><p>  p->next=adjl.adjs[g.a[i]-1].link;</p><p>  adjl.adjs[g.a[i]-1].link=p;</p><p><b>  }</b></p><p><b>  }</b></

34、p><p>  if(g.kind==2||g.kind==4){//創(chuàng)建無向鄰接表</p><p>  for(i=0;i<adjl.arcnum;i++){</p><p>  p=(edgenode*)malloc(sizeof(edgenode));</p><p>  p->info=g.h[i];</p>&

35、lt;p>  p->adjvex=g.b[i];</p><p>  p->next=adjl.adjs[g.a[i]-1].link;</p><p>  adjl.adjs[g.a[i]-1].link=p;</p><p>  p=(edgenode*)malloc(sizeof(edgenode));</p><p>

36、;  p->info=g.h[i];</p><p>  p->adjvex=g.a[i];</p><p>  p->next=adjl.adjs[g.b[i]-1].link;</p><p>  adjl.adjs[g.b[i]-1].link=p;</p><p><b>  }</b><

37、/p><p><b>  }</b></p><p>  printf("鄰接表為:\n");</p><p>  for(i=0;i<g.vexnum;i++){</p><p>  printf("[%d,%c]=>",i+1,adjl.adjs[i].data);&l

38、t;/p><p>  p=adjl.adjs[i].link;</p><p>  while(p!=null){</p><p>  printf("[%c,%d]-->",adjl.adjs[(p->adjvex)-1].data,p->info);</p><p>  p=p->next;<

39、/p><p><b>  }</b></p><p>  printf("^\n");</p><p><b>  }</b></p><p>  return adjl;</p><p><b>  }</b></p>&

40、lt;p>  void initqueue(linkqueue *p){ //構(gòu)造空隊(duì)列</p><p>  p->front=(linkqlist *)malloc(sizeof(linkqlist));</p><p>  p->rear=p->front;</p><p>  (p->front)->next=null;&l

41、t;/p><p><b>  }</b></p><p>  status empty(linkqueue *q){ //判斷是否為空</p><p><b>  int v;</b></p><p>  if(q->front==q->rear) v=true;</p>

42、<p>  else v=false;</p><p><b>  return v;</b></p><p><b>  }</b></p><p>  int addqueue(linkqueue *q,int e){</p><p>  q->rear->next=(li

43、nkqlist *)malloc(sizeof(linkqlist));</p><p>  q->rear=q->rear->next;</p><p>  if(!q->rear) return -1;</p><p>  q->rear->data=e;</p><p>  q->rear-&g

44、t;next=null;</p><p>  return ok;</p><p><b>  }</b></p><p>  status delqueue(linkqueue *q){ //</p><p>  linkqlist *p;</p><p><b>  int e;&

45、lt;/b></p><p>  if (q->front==q->rear)</p><p>  printf("the linklist is overflow");</p><p>  else p=(q->front)->next;</p><p>  (q->front)-&g

46、t;next=p->next;</p><p>  e=p->data;</p><p>  if(q->rear==p)</p><p>  q->rear=q->front;</p><p><b>  free(p);</b></p><p>  return(

47、e);</p><p><b>  }</b></p><p>  bool visit[maxlen]; //深度優(yōu)先搜索</p><p>  void DFS(adjlist adjl,int i){</p><p>  edgenode *p;</p><p>  visit[i

48、]=1; </p><p>  printf("%c ",adjl.adjs[i].data);</p><p>  for(p=adjl.adjs[i].link;p;p=p->next){</p><p>  if(!visit[p->adjvex]) DFS(adjl,p->adjvex); </p><

49、;p><b>  }</b></p><p><b>  } </b></p><p>  void DFSTraverse(adjlist adjl){ </p><p><b>  int i;</b></p><p>  printf("\t\t深度優(yōu)先搜

50、索 :");</p><p>  for( i=0;i<maxlen;i++)</p><p>  visit[i]=false;</p><p>  for( i=0;i<=adjl.vexnum;i++)</p><p>  if(!visit[i]) DFS(adjl,i); </p><p&g

51、t;<b>  }</b></p><p>  queue <int> Q;</p><p>  void BFSTraverse(adjlist adjl) { //廣度優(yōu)先搜索</p><p>  edgenode *w;</p><p><b>  int i,j;</b><

52、;/p><p>  printf("\n\t\t廣度優(yōu)先搜索 :");</p><p>  for( i=0;i<maxlen;i++)</p><p>  visit[i]=0;</p><p>  for(i=0;i<=adjl.vexnum;i++){</p><p>  if(!vi

53、sit[i]){</p><p>  visit[i]=1; </p><p>  printf("%c ",adjl.adjs[i].data);</p><p>  Q.push(i);</p><p>  while(!Q.empty()){</p><p>  j=Q.front();<

54、;/p><p><b>  Q.pop();</b></p><p>  for( w=adjl.adjs[i].link;w;w=w->next)</p><p>  if(!visit[w->adjvex]){</p><p>  visit[w->adjvex]=1; </p><

55、p>  printf("%c ",adjl.adjs[w->adjvex-1].data);</p><p>  Q.push(w->adjvex);</p><p><b>  }</b></p><p><b>  }</b></p><p><b&g

56、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  status initstack(stackstru *s){ //構(gòu)造空棧</p><p><b>  s->top=0;</b>&

57、lt;/p><p>  return ok;</p><p><b>  }</b></p><p>  status push(stackstru *s,int x) { //進(jìn)棧</p><p>  if (s->top==maxlen)</p><p>  printf("

58、the stack is overflow!\n");</p><p><b>  else{</b></p><p>  s->top=s->top+1;</p><p>  s->stack[s->top]=x;</p><p><b>  }</b></

59、p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  status pop(stackstru *s) //出棧</p><p><b>  { </b></p><p><b> 

60、 int y;</b></p><p>  if(s->top==0)printf("the stack is empty!\n");</p><p><b>  else</b></p><p>  {y=s->stack[s->top];</p><p>  s-&g

61、t;top=s->top-1;</p><p><b>  }</b></p><p><b>  return y;</b></p><p><b>  }</b></p><p>  status stackempty(stackstru *s) //判斷棧是否為

62、空</p><p>  { if (s->top==maxlen) return (true);</p><p>  else return (false);</p><p><b>  }</b></p><p>  int TopologicalSort(adjlist adjl) //拓?fù)渑判?lt;/p

63、><p><b>  {</b></p><p>  stack <int> S;</p><p>  edgenode *p;</p><p>  int i,j,count=0;</p><p>  printf("\n拓?fù)渑判颍?quot;);</p><

64、;p>  for(i=0;i<=adjl.vexnum;i++)</p><p>  if(adjl.adjs[i].id==0)S.push(i);count=0;</p><p>  while(!S.empty())</p><p><b>  {</b></p><p>  j=S.top(); S.

65、pop(); </p><p><b>  count++;</b></p><p>  printf("(%d %c) ",j,adjl.adjs[j].data);</p><p>  for(p=adjl.adjs[i].link;p;p=p->next)</p><p><b&g

66、t;  {</b></p><p>  int k=p->adjvex;</p><p>  int d=--(adjl.adjs[k].id);</p><p>  if(!d)S.push(k);</p><p><b>  }</b></p><p><b>  

67、}</b></p><p>  if(count<adjl.vexnum)</p><p>  { printf("\n網(wǎng)中有環(huán)!\n");</p><p>  return error;</p><p><b>  }</b></p><p>  else

68、return ok;</p><p><b>  } </b></p><p>  void prim(graph g){</p><p>  int i,j,k,min;</p><p>  int lowcost[maxlen];</p><p>  int closet[maxlen];&l

69、t;/p><p>  printf("最小生成樹的邊為:\n");</p><p>  for(i=1;i<g.vexnum;i++){</p><p>  lowcost[i]=g.arcs[0][i];</p><p>  closet[i]=1;</p><p><b>  }&l

70、t;/b></p><p>  closet[1]=0;</p><p><b>  j=1;</b></p><p>  for(i=1;i<g.vexnum;i++){</p><p>  min=lowcost[j];</p><p><b>  k=i;</b&

71、gt;</p><p>  for(j=1;j<g.vexnum;j++)</p><p>  if(lowcost[j]<min&&closet[j]!=0){</p><p>  min=lowcost[j];</p><p><b>  k=j;</b></p><p

72、><b>  }</b></p><p>  printf("(%c,%c),",g.vexs[k-1],g.vexs[closet[k-1]]);</p><p>  closet[k]=0;</p><p>  for(j=1;j<g.vexnum;j++)</p><p>  if(

73、g.arcs[k][j]<lowcost[j]&&closet[j]!=0){</p><p>  lowcost[j]=g.arcs[k][j];</p><p>  closet[j]=k;</p><p><b>  }</b></p><p><b>  }</b>&l

74、t;/p><p><b>  }</b></p><p>  int ve[maxlen];</p><p>  int vl[maxlen];</p><p>  status toporder(adjlist adjl,stackstru *t){ //關(guān)鍵路徑</p><p>  int i,

75、j,count,k;</p><p>  edgenode *p;</p><p>  initstack(s);</p><p>  initstack(t);</p><p>  for(i=0;i<adjl.vexnum;i++)</p><p>  if(adjl.adjs[i].id==0) push(

76、s,i);</p><p><b>  count=0;</b></p><p>  for(i=0;i<adjl.vexnum;i++) ve[i]=0;</p><p>  while(!stackempty(s))</p><p><b>  { </b></p><

77、p>  j=pop(s);push(t,j);++count;</p><p>  for(p=adjl.adjs[j].link;p;p=p->next)</p><p><b>  { </b></p><p>  k=p->adjvex;</p><p>  if(--adjl.adjs[k-1]

78、.id==0) push(s,k-1);</p><p>  if(ve[j]+(p->info)>ve[k-1]) ve[k-1]=ve[j]+(p->info);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(coun

79、t<adjl.vexnum) return error;</p><p>  else return ok;</p><p><b>  }</b></p><p>  int criticalpath(adjlist adjl)</p><p><b>  { </b></p>

80、<p>  int i,j,k,dut,ee,el;</p><p>  edgenode *p;</p><p>  if(!toporder(adjl,t)) return error;</p><p>  for(i=0;i<adjl.vexnum;i++) vl[i]=ve[i-1];</p><p>  print

81、f("關(guān)鍵路徑為:\n");</p><p>  while(!stackempty(t))</p><p>  for(j=pop(t), p=adjl.adjs[j].link;p;p=p->next)</p><p><b>  { </b></p><p>  k=p->adjve

82、x; dut=(p->info);</p><p>  if(vl[k]-dut<vl[j]) vl[j]=vl[k]-dut;</p><p><b>  }</b></p><p>  for(j=0;j<adjl.vexnum;++j)</p><p>  for(p=adjl.adjs[j].l

83、ink;p;p=p->next){</p><p>  k=p->adjvex;dut=p->info;</p><p>  ee=ve[j];el=vl[k-1]-dut;</p><p>  if(ee==el) printf("(%c,%c)->",adjl.adjs[j].data,adjl.adjs[k-1].d

84、ata);</p><p><b>  }</b></p><p>  return ok;</p><p><b>  }</b></p><p>  void shortpath_dijkstra(graph g) //有向網(wǎng)的最短路徑</p><p><b>

85、  { </b></p><p>  int cost[maxlen][maxlen];</p><p>  int dist[maxlen];</p><p>  int path[maxlen];</p><p>  int s[maxlen];</p><p>  int i,j,v0,min,u;&

86、lt;/p><p>  printf("\n請(qǐng)輸入起點(diǎn)的編號(hào):");</p><p>  scanf("%d",&v0);</p><p><b>  v0--;</b></p><p>  for(i=0;i<g.vexnum;i++)</p><p

87、><b>  {</b></p><p>  for(j=0;j<g.vexnum;j++)</p><p>  cost[i][j]=g.arcs[i][j];</p><p><b>  }</b></p><p>  for(i=0;i<g.vexnum;i++)</p

88、><p><b>  { </b></p><p>  dist[i]=cost[v0][i];</p><p>  if(dist[i]<large&&dist[i]>0) path[i]=v0;</p><p><b>  s[i]=0;</b></p>&

89、lt;p><b>  }</b></p><p><b>  s[v0]=1;</b></p><p>  for(i=0;i<g.vexnum;i++)</p><p><b>  { </b></p><p>  min=large;</p>&l

90、t;p><b>  u=v0;</b></p><p>  for(j=0;j<g.vexnum;j++)</p><p>  if(s[j]==0&&dist[j]<min)</p><p><b>  {</b></p><p>  min=dist[j];u=

91、j;</p><p><b>  }</b></p><p><b>  s[u]=1; </b></p><p>  for(j=0;j<g.vexnum;j++)</p><p>  if(s[j]==0&&dist[u]+cost[u][j]<dist[j])<

92、;/p><p><b>  { </b></p><p>  dist[j]=dist[u]+cost[u][j];</p><p>  path[j]=u;</p><p><b>  }</b></p><p><b>  }</b></p>

93、<p>  printf("\n頂點(diǎn)%d到各頂點(diǎn)的最短路徑長度為:\n",v0);</p><p>  for(i=0;i<g.vexnum;i++)</p><p>  if(s[i]==1)</p><p><b>  { </b></p><p><b>  u=i

94、;</b></p><p>  while(u!=v0)</p><p>  { printf("%4c<-",g.vexs[u]);</p><p>  u=path[u];</p><p><b>  }</b></p><p>  printf(&quo

95、t;%4c",g.vexs[u]);</p><p>  printf(":%d\n",path[i]);</p><p><b>  }</b></p><p>  else printf("%4c<-%4c:無路徑\n",g.vexs[i],g.vexs[v0]);</p>

96、<p><b>  }</b></p><p>  void ShowMainMenu(){</p><p>  printf("\n");</p><p>  printf("**************圖的基本操作及應(yīng)用***************\n");</p>&l

97、t;p>  printf("* 1 無向圖的基本操作及應(yīng)用 *\n");</p><p>  printf("* 2 有向圖的基本操作及應(yīng)用 *\n");</p><p>  printf("* 3 無向網(wǎng)的基本操作及應(yīng)用

98、 *\n");</p><p>  printf("* 4 有向網(wǎng)的基本操作及應(yīng)用 *\n");</p><p>  printf("* 5 退出\n");</p><p>  printf("*************************************

99、**********\n");</p><p><b>  }</b></p><p>  void UDG(){</p><p><b>  int n;</b></p><p><b>  do{</b></p><p>  printf(

100、"\n");</p><p>  printf("**************無向圖的基本操作及應(yīng)用***************\n");</p><p>  printf("* 1 創(chuàng)建無向圖的鄰接矩陣 *\n");</p><p>  printf(&

101、quot;* 2 創(chuàng)建無向圖的鄰接表 *\n");</p><p>  printf("* 3 無向圖的深度優(yōu)先遍歷 *\n");</p><p>  printf("* 4 無向圖的廣度優(yōu)先遍歷

102、*\n");</p><p>  printf("* 5 退出\n");</p><p>  printf("***************************************************\n");</p><p>  printf("請(qǐng)選擇:");</p>

103、<p>  scanf("%d",&n);</p><p>  switch(n){</p><p><b>  case 1:</b></p><p>  printf("----------wait-------");creategraph(g);break; //鄰接矩陣&l

104、t;/p><p><b>  case 2:</b></p><p>  printf("----------wait-------");createlist (g,adjl);break; //鄰接表</p><p><b>  case 3:</b></p><p>  pri

105、ntf("----------wait-------");DFSTraverse(adjl);break; //深度優(yōu)先搜索</p><p><b>  case 4:</b></p><p>  printf("----------wait-------");BFSTraverse(adjl);break; //廣

106、度優(yōu)先搜索</p><p>  case 5:break;</p><p><b>  default:</b></p><p>  printf("ERROR!");</p><p><b>  }</b></p><p>  }while(n!=5);

107、</p><p><b>  }</b></p><p>  void DG(){ </p><p><b>  int n;</b></p><p><b>  do{</b></p><p>  printf("\n");<

108、/p><p>  printf("**************有向圖的基本操作及應(yīng)用***************\n");</p><p>  printf("* 1 創(chuàng)建有向圖的鄰接矩陣 *\n");</p><p>  printf("* 2 創(chuàng)建有向圖的鄰接表

109、 *\n");</p><p>  printf("* 3 拓?fù)渑判?*\n");</p><p>  printf("* 4 退出 *\n&qu

110、ot;);</p><p>  printf("***************************************************\n");</p><p>  printf("請(qǐng)選擇:");</p><p>  scanf("%d",&n);</p><p&

111、gt;  switch(n){</p><p><b>  case 1:</b></p><p>  printf("--------wait-------");creategraph(g);break; //鄰接矩陣</p><p><b>  case 2:</b></p>&

112、lt;p>  printf("--------wait-------");createlist (g,adjl);break; //鄰接表</p><p><b>  case 3:</b></p><p>  printf("--------wait-------");createlist(g,adjl);Topo

113、logicalSort(adjl);break; //拓?fù)渑判?lt;/p><p>  case 4:break; //退出 </p><p><b>  default:</b></p><p>  printf("ERROR!&q

114、uot;);</p><p><b>  }</b></p><p>  }while(n!=4);</p><p><b>  }</b></p><p>  void UDN(){ </p><p><b>  int n;</b></p>

115、;<p><b>  do{</b></p><p>  printf("\n");</p><p>  printf("**************無向網(wǎng)的基本操作及應(yīng)用***************\n");</p><p>  printf("* 1 創(chuàng)建無向網(wǎng)的鄰接矩陣

116、 *\n");</p><p>  printf("* 2 創(chuàng)建無向網(wǎng)的鄰接表 *\n");</p><p>  printf("* 3 Prim算法求最小生成樹 *\n");</p&g

117、t;<p>  printf("* 4 kraskal算法求最小生成樹 *\n");</p><p>  printf("* 5 退出\n");</p><p>  printf("**************************************************

118、*\n");</p><p>  printf("請(qǐng)選擇:");</p><p>  scanf("%d",&n);</p><p>  switch(n){</p><p><b>  case 1:</b></p><p>  prin

119、tf("---------wait-------");creategraph(g);break; // 創(chuàng)建無向網(wǎng)的鄰接矩陣</p><p><b>  case 2:</b></p><p>  printf("--- ----wait-------");createlist (g,adjl);break; // 創(chuàng)建

120、無向網(wǎng)的鄰接表</p><p><b>  case 3:</b></p><p>  printf("---------wait-------");prim(g);break; //Prim算法求最小生成樹</p><p><b>  case 4:</b></p><p

121、>  printf("---------wait-------");break;</p><p>  case 5:break;</p><p><b>  default:</b></p><p>  printf("ERROR!");</p><p><b> 

122、 }</b></p><p>  }while(n!=5);</p><p><b>  }</b></p><p>  void DN(){ </p><p><b>  int n;</b></p><p><b>  do{</b>&l

123、t;/p><p>  printf("\n");</p><p>  printf("**************有向網(wǎng)的基本操作及應(yīng)用***************\n");</p><p>  printf("* 1 創(chuàng)建有向網(wǎng)的鄰接矩陣 *\n");<

124、;/p><p>  printf("* 2 創(chuàng)建有向網(wǎng)的鄰接表 *\n");</p><p>  printf("* 3 關(guān)鍵路徑 *\n");</p><p>  printf("* 4 單

125、源頂點(diǎn)最短路徑問題 *\n");</p><p>  printf("* 5 退出\n");</p><p>  printf("***************************************************\n");</p><p>  pr

126、intf("請(qǐng)選擇:");</p><p>  scanf("%d",&n);</p><p>  switch(n){</p><p><b>  case 1:</b></p><p>  printf("---------wait-------")

127、;creategraph(g);break; //創(chuàng)建有向網(wǎng)的鄰接矩陣</p><p><b>  case 2:</b></p><p>  printf("---------wait-------");createlist (g,adjl);break; //創(chuàng)建有向網(wǎng)的鄰接表</p><p><b> 

128、 case 3:</b></p><p>  printf("---------wait-------");criticalpath(adjl);break; //關(guān)鍵路徑</p><p><b>  case 4:</b></p><p>  printf("---------wait-------

129、");criticalpath(adjl);break; //單源頂點(diǎn)最短路徑問題</p><p>  case 5:break; //退出</p><p><b>  default:</b></p><p>  printf(&

130、quot;ERROR!");</p><p><b>  }</b></p><p>  }while(n!=5);</p><p><b>  }</b></p><p>  void main(){</p><p>  int i,j,k,h,n;</p&

131、gt;<p><b>  do{</b></p><p>  ShowMainMenu();</p><p>  printf("請(qǐng)選擇:");</p><p>  scanf("%d",&n);</p><p>  if(n>5) error;<

132、/p><p><b>  else</b></p><p><b>  {</b></p><p><b>  g.kind=n;</b></p><p><b>  h=n;</b></p><p>  printf("請(qǐng)輸

133、入頂點(diǎn)數(shù),邊數(shù):");</p><p>  scanf("%d,%d",&i,&j);</p><p>  g.vexnum=i;adjl.vexnum=i;</p><p>  g.arcnum=j;adjl.arcnum=j;</p><p>  for (i=0;i<g.vexnum;

134、i++){</p><p>  printf("第%d個(gè)頂點(diǎn)的信息:",i+1);</p><p>  scanf("%s",&g.vexs[i]);</p><p>  adjl.adjs[i].data=g.vexs[i];</p><p>  adjl.adjs[i].link=null;

135、</p><p>  adjl.adjs[i].id=0;</p><p><b>  }</b></p><p>  for (k=1;k<=g.arcnum;k++)</p><p><b>  {//label:</b></p><p>  if (g.kind=

136、=2||g.kind==4)</p><p>  printf("第%d條邊的起點(diǎn)編號(hào),終點(diǎn)編號(hào):",k);</p><p>  else printf("第%d條邊的兩個(gè)頂點(diǎn)的編號(hào):",k);</p><p>  scanf("%d,%d",&i,&j);</p><p

137、>  g.a[k-1]=i;g.b[k-1]=j;</p><p>  while (i<1||i>g.vexnum||j<1||j>g.vexnum)</p><p>  {printf(" 編號(hào)超出范圍,重新輸入");//goto label;</p><p><b>  }</b><

138、/p><p>  if (g.kind==3||g.kind==4)</p><p>  {printf("\t該邊的權(quán)值:");</p><p>  scanf("%d",&h);</p><p>  g.h[k-1]=h;</p><p><b>  }<

139、/b></p><p>  else g.h[k-1]=null;</p><p>  adjl.adjs[i].id++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  switch(n){</p>

140、<p>  case 1:UDG();break;</p><p>  case 2:DG();break;</p><p>  case 3:UDN();break;</p><p>  case 4:DN();break;</p><p>  case 5:break;</p><p>  default

141、:printf("ERROR!");break;</p><p><b>  }</b></p><p>  }while(n!=5);</p><p><b>  }</b></p><p><b>  測試</b></p><p>

142、;  程序開始運(yùn)行,進(jìn)入選擇界面</p><p>  選擇無向圖,并創(chuàng)建無向圖</p><p>  C)基于已創(chuàng)建的的無向圖選擇各項(xiàng)具體的操作</p><p><b>  難點(diǎn)與收獲</b></p><p>  這次的實(shí)習(xí)報(bào)告相對(duì)我而言算是比較難的,因?yàn)樵趯W(xué)這門課程的時(shí)候就沒怎么專心聽講,所以在拿到計(jì)劃書的時(shí)候,對(duì)很多地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論