c语言图的深度遍历

#include"stdio.h"
#include"stdlib.h"
typedef struct node{
int adjvertex;
struct node *next;
}EdgeNode;

typedef struct vnode{
int vertex;
EdgeNode *first;
}VertexNode;

typedef struct{
VertexNode a[30];
int vertexNum,edgeNum;
}ALGraph;

void Creat(ALGraph *g);
void DFStraverse(ALGraph *g);
void DFS(ALGraph *g,int v);
int visit[30];

void main()
{ALGraph *g;
g=(ALGraph*)malloc(sizeof(ALGraph));
Creat(g);
DFStraverse(g);
}

void Creat(ALGraph *g)
{
int i,j,k;
EdgeNode *p;
printf("输入顶点数:\n");
scanf("%d",&(g->vertexNum));
printf("输入边数:\n");
scanf("%d",&(g->edgeNum));
printf("输入顶点信息:\n");
for(i=0;i<(g->vertexNum);i++){
scanf("%d",&(g->a[i].vertex));
g->a[i].first=NULL;
}//初始化
printf("输入边信息:\n");
for(k=0;k<(g->edgeNum);k++){
scanf("%d",&i);
scanf("%d",&j);
p=(EdgeNode*)malloc(sizeof(EdgeNode));
p->adjvertex=j;
p->next=g->a[i].first;
g->a[i].first=p;
printf("%d与%d有边\n",i,j);
}
}

void DFStraverse(ALGraph *g)
{int v;
for(v=0;vvertexNum;v++)
visit[v]=0;
for(v=0;vvertexNum;v++)
if(visit[v]!=1)DFS(g,v);
}

void DFS(ALGraph *g,int v)
{EdgeNode *p;
int w;
printf("%d ",g->a[v]);
visit[v]=1;
for(p=g->a[v].first;p;p=p->next)
{w=p->adjvertex;
if(visit[w]!=1)DFS(g,w);}
}

相关文档
最新文档