图的深度遍历
#include
#include
#define n 4 //图的顶点数
#define e 5 //图的边数
typedef struct node
{
int adjvex;
struct node *next;
} edgenode;//边表节点
typedef struct
{
char vertex;
edgenode *link;
}vexnode;//顶点表节点
vexnode ga[n];
int visited[n];
void Creatadjlist(vexnode ga[])//建立无向图的邻接表{
int i,j,k;
edgenode *s;
printf("请输入各个顶点:");
for(i=0;i { ga[i].vertex=getchar(); ga[i].link=NULL; } printf("请输入各个边:"); for(k=0;k { scanf("%d%d",&i,&j); s=malloc(sizeof(edgenode)); s->adjvex=j; s->next=ga[i].link; ga[i].link=s; s=malloc(sizeof(edgenode)); s->adjvex=i; s->next=ga[j].link; ga[j].link=s; } } void Dfsl(int i)//邻接表的深度遍历 { edgenode *p; printf("node:%c\n",ga[i].vertex); visited[i]=1; p=ga[i].link; while(p!=NULL) { if(!visited[p->adjvex]) { Dfsl(p->adjvex); } p=p->next; } } void main() { int i; Creatadjlist( ga); printf("请输入需要遍历的顶点:\n"); scanf("%d",&i); Dfsl(i); }