国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
圖的深度遍歷
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int visited[10];/*訪問(wèn)標(biāo)志數(shù)組*/
typedef struct ArcCell{
 int adj;/*頂點(diǎn)關(guān)系類型,用1表示相鄰,0表示不相鄰*/
}ArcCell,**AdjMatrix;/*鄰接矩陣*/
typedef struct type{
 char data[3];/*頂點(diǎn)值*/
 struct type *next;/*頂點(diǎn)的下一個(gè)指針*/
}VertexType;
typedef struct{
 VertexType *vexs;/*頂點(diǎn)向量*/
 AdjMatrix arcs;/*鄰接矩陣*/
 int vexnum,arcnum;/*圖的頂點(diǎn)數(shù)和邊數(shù)*/
}MGraph;
void InitGraph(MGraph *G)/*初始圖*/
{ int i,nu,mu;
 printf("輸入頂點(diǎn)的個(gè)數(shù)和(邊)弧的個(gè)數(shù),空格隔開(kāi):");
  scanf("%d%d",&nu,&mu);
  G->arcs=(ArcCell **)malloc(nu*sizeof(ArcCell *));
  for(i=0;i<nu;i++)/*分配鄰接矩陣空間*/
      G->arcs[i]=(ArcCell *)malloc(nu*sizeof(ArcCell));
  G->vexs=(VertexType *)malloc(nu*sizeof(VertexType));/*分配頂點(diǎn)空間*/
  G->vexnum=nu;G->arcnum=mu;/*圖的頂點(diǎn)數(shù)和邊數(shù)*/
}
void InsertGraph(MGraph *G,int i,VertexType e)
{ if(i<0||i>G->vexnum) return;
  G->vexs[i].next=e.next;
  strcpy(G->vexs[i].data,e.data);
}
int Locate(MGraph G,VertexType v1)/*確定v1在圖頂點(diǎn)中的位置*/
{ int i;
 for(i=0;i<G.vexnum;i++)
   if(strcmp(v1.data,G.vexs[i].data)==0) return i;
  return -1;
}
void CreateUND(MGraph *G)/*采用數(shù)組(鄰接矩陣)和鄰接表表示無(wú)向圖*/
{int i,j,k,p[10],d;
 VertexType v1,v2,*q1,*q2,*q;
 for(i=0;i<10;i++) p[i]=0;
 for(i=0;i<G->vexnum;++i)/*初始鄰接表*/
 { for(j=0;j<G->vexnum;++j) G->arcs[i][j].adj=0;}
 for(k=0;k<G->arcnum;++k)
 {printf("\n輸入第 %d 條(邊)弧相對(duì)的兩個(gè)頂點(diǎn)值,每輸入一個(gè),按回車:\n",k+1);
  d=0;
  scanf("%s%s",v1.data,v2.data);/*輸入相鄰的兩個(gè)點(diǎn)值*/
  i=Locate(*G,v1);j=Locate(*G,v2);/*用i 和j來(lái)確定它們的位置*/
  G->arcs[i][j].adj=1;
  G->arcs[j][i].adj=G->arcs[i][j].adj;
  q1=(VertexType *)malloc(sizeof(VertexType));/*為q1和q2各分配空間*/
  q2=(VertexType *)malloc(sizeof(VertexType));
  strcpy(q1->data,G->vexs[i].data);
  strcpy(q2->data,G->vexs[j].data);
  q1->next=q2->next=NULL;
  if(p[i]==0) {G->vexs[i].next=q2;p[i]++;}
  else {q=&(G->vexs[i]);
   while(d!=p[i]) {d++;q=q->next;}
   p[i]++;
   q->next=q2;/*接在最后*/
  }
  d=0;/*因?yàn)槭菬o(wú)向圖所以j頂點(diǎn)也要接*/
  if(p[j]==0) {G->vexs[j].next=q1;p[j]++;}/*同上*/
  else {q=&(G->vexs[j]);
   while(d!=p[j]) {d++;q=q->next;}
      p[j]++;
   q->next=q1;
  }
 }
}
void Pint(MGraph G)/*輸出鄰接矩陣*/
{int i,j;
 for(i=0;i<G.vexnum;i++)
 { for(j=0;j<G.vexnum;j++)
   printf("%d  ",G.arcs[i][j].adj);
      printf("\n");
 }
}
void DFS(MGraph G,int v)/*從第v個(gè)頂點(diǎn)出發(fā)遞歸遍歷*/
{ VertexType *ptr;/*是對(duì)圖的鄰接表作遍歷*/
  int i;
  visited[v]=1;printf(" ** %s  ",G.vexs[v].data);/*訪問(wèn)第V個(gè)頂點(diǎn)*/
  ptr=G.vexs[v].next;/*V頂點(diǎn)的第一個(gè)相鄰點(diǎn)*/
  while(ptr!=NULL)/*上面的頂點(diǎn)存在*/
  {i=Locate(G,*ptr);/*求出它的位置*/
   if(!visited[i]) DFS(G,i);
   ptr=ptr->next;
  }
}
void DFSTraverse(MGraph G)/*對(duì)圖作深度遍歷,畫鄰接表分析*/
{int i;
 for(i=0;i<G.vexnum;i++)/*如果圖是連通的則一次就能遍歷,否則對(duì)另一個(gè)連通的第一個(gè)頂點(diǎn)。。同上*/
  if(!visited[i]) DFS(G,i);
}
void main()
{ MGraph G;
 VertexType e,*p;
 int i;
 InitGraph(&G);
 for(i=0;i<10;i++) visited[i]=0;/*初始為0,表示沒(méi)被訪問(wèn)過(guò)*/
 printf("頂點(diǎn)值,每輸入一個(gè),按回車: \n");
 for(i=0;i<G.vexnum;++i)/*給圖頂點(diǎn)向量付值*/
 {scanf("%s",e.data);e.next=NULL;InsertGraph(&G,i,e);}
  CreateUND(&G);/*構(gòu)造圖結(jié)構(gòu)*/
  printf("鄰接矩陣為:\n");
  Pint(G);/*輸出鄰接矩陣*/
  printf("鄰接表為:\n");
  for(i=0;i<G.vexnum;i++)/*輸出鄰接表*/
  {printf(" *%s* ",G.vexs[i].data);p=G.vexs[i].next;
  while(p) {printf(" *%s* ",p->data);p=p->next;}
  printf("\n");
  }
  printf("深度遍歷結(jié)果為:\n");
  DFSTraverse(G);/*深度遍歷*/
  getch();
}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語(yǔ)言圖的創(chuàng)建
基于鄰結(jié)矩陣的圖的BFS和DFS遍歷
最小支撐樹(shù)的prim算法(反圈法)c++實(shí)現(xiàn)
c語(yǔ)言數(shù)據(jù)結(jié)構(gòu)--圖的鄰接矩陣和鄰接表操作的基本操作
用Dijkstra算法輸出最短路徑以及對(duì)應(yīng)的最小權(quán)值
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服