图的深度优先遍历

来源:互联网 发布:贴吧数据加载失败 编辑:程序博客网 时间:2024/04/27 18:42

#include<stdio.h>
#include<malloc.h>
#define OK 1
#define TRUE 1
#define MAX_VERTEX_NUM 20
typedef int InfoType;//弧相关信息类型
typedef char VertexType;//接点信息类型
typedef struct ArcNode{
 int             adjvex;
    struct ArcNode  *nextarc;//向下一条弧的指针
    InfoType *info;
}ArcNode;
typedef struct VNode{
    VertexType    data;
    ArcNode    *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct ALGraph{
 AdjList    vertices;
 int        vexnum,arcnum;
 int        kind;
}ALGraph;
//辅助数组记录每个数据是否被访问过
int visited[MAX_VERTEX_NUM];
void Create_ALGraph(ALGraph &G)
{ ArcNode *p;
  int       i,j,x,y;
  char      v,w;
 
  for(i=1;i<=G.vexnum;++i)
  {printf("/n输入第%d个顶点的值:/n",i);
   scanf("/n%c",&G.vertices[i].data);
   G.vertices[i].firstarc=NULL;
   printf("/n/n");
  }
  for(j=1;j<=G.arcnum;++j)
  {printf("/n输入第%d条弧的弧尾弧头顶点(用逗号隔开):/n",j);
   scanf("/n%c,%c",&v,&w);
   printf("/n/n");
   for(i=1;i<=G.vexnum;++i)
   {if(G.vertices[i].data==v) x=i;
    if(G.vertices[i].data==w) y=i;
   }
   p=(struct ArcNode*)malloc(sizeof(ArcNode));
   p->adjvex=y;
   p->nextarc=G.vertices[x].firstarc;
   G.vertices[x].firstarc=p;
  }
  }
void Visit(ALGraph G,int i)
{printf("%c",G.vertices[i].data);
}
void DFS(ALGraph &G ,char v)
  { struct ArcNode *q;
  int i;
 
 
   for(i=1;i<=G.vexnum;++i)
   {
     if(G.vertices[i].data==v)
     visited[i]; Visit(G,i);
     }
   for(q=G.vertices[i].firstarc;q;q=q->nextarc)
   {if(!visited[q->adjvex]) DFS(G,G.vertices[q->adjvex].data);
   }
  }
 void main()
  {char v;
   int m,s,d;
   ALGraph G;
   v=NULL;
   printf("/n/n连通图的深度遍历/n");
   printf("/n输入顶点数和边数(用逗号隔开):/n");
   scanf("%d,%d",&s,&d);
   G.vexnum=s;
      G.arcnum=d;
   printf("/n");
   Create_ALGraph(G);
   for(m=0;m<G.vexnum;++m)visited[m]=0;
   printf("/n输入最先访问的顶点:");
   scanf("/n%c",&v);
   printf("/n/n");
printf("遍历结果为:/n");
 DFS(G,v);

}

原创粉丝点击