资源描述:
《无向图的深度优先和广度优先遍历》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#defineM20#include"stdio.h"#include"stdlib.h"#include"malloc.h" typedefstruct{/*定义图*/ intV[M]; intR[M][M]; intvexnum;}Graph; voidcreatgraph(Graph*g,intn){/*创建图*/ inti,j,r1,r2; g->vexnum=n; for(i=1;i<=n;i++)/*顶点用i表示*/ { g->V[i]=i; } for(i=1;i<=n;i++)/*初始化R*/ for(j=1;j<=
2、n;j++) { g->R[i][j]=0; } printf("PleaseinputR(0,0END):");/*输入R*/ scanf("%d,%d",&r1,&r2); while(r1!=0&&r2!=0) { g->R[r1][r2]=1; g->R[r2][r1]=1; scanf("%d,%d",&r1,&r2); }} voidprintgraph(Graph*g){/*打印图的邻接矩阵*/ inti,j; for(i=1;i<=g->vexnum;i++) {for(j=1;j<=g->vexnu
3、m;j++) { printf("%2d",g->R[i][j]); } printf(""); }} intvisited[M];/*全局变量:访问标志数组*/ voidvisitvex(Graph*g,intvex){/*访问顶点*/ printf("%d",g->V[vex]);} intfirstadjvex(Graph*g,intvex){/*获取第一个未被访问的邻接节点*/ intw,i; for(i=1;i<=g->vexnum;i++) { if(g->R[vex][i]==1&&v
4、isited[i]==0) { w=i; break; } else { w=0; } } returnw;} intnextadjvex(Graph*g,intvex,intw){/*获取下一个未被访问的邻接节点*/ intt; t=firstadjvex(g,w); returnt;} voidDFS(Graph*g,intvex){/*深度递归遍历*/ intw; visited[vex]=1; visitvex(g,vex
5、); for(w=firstadjvex(g,vex);w>0;w=nextadjvex(g,vex,w)) if(!visited[w]) { DFS(g,w); }} voidDFSTraverse(Graph*g){/*深度遍历*/ inti; for(i=1;i<=g->vexnum;i++) visited[i]=0; for(i=1;i<=g->vexnum;i++) if(!visited[i]) { DFS(g,i); }} typedefstruct{/*定义队列*/
6、 intV[M]; intfront; intrear;}Queue; voidInitqueue(Queue*q){/*初始化队列*/ q->front=0; q->rear=0;} intQuempty(Queue*q){/*判断队列是否为空*/ if(q->front==q->rear) { return0; } else { return1; }} Enqueue(Queue*q,inte){/*入队操作*/ if((q->rear+1)%M==q->front) { printf("Thequeueiso
7、verflow!"); return0; } else { q->V[q->rear]=e; q->rear=(q->rear+1)%M; return1; }} Dequeue(Queue*q){/*出队操作*/ intt; if(q->front==q->rear) { printf("Thequeueisempty!"); return0; } else { t=q->V[q->front]; q->fron