无向图的深度优先和广度优先遍历

无向图的深度优先和广度优先遍历

ID:38408097

大小:19.23 KB

页数:7页

时间:2019-06-12

无向图的深度优先和广度优先遍历_第1页
无向图的深度优先和广度优先遍历_第2页
无向图的深度优先和广度优先遍历_第3页
无向图的深度优先和广度优先遍历_第4页
无向图的深度优先和广度优先遍历_第5页
资源描述:

《无向图的深度优先和广度优先遍历》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。