数据结构,图的基本操作
数据结构,图的基本操作
对邻接表存储的图进行深度优先搜索算法:
#include "stdio.h"
#define MAXVER 10 /* 最多顶点数 */
typedef char ElemType /* 顶点元素类型 */
typedef struct node
{ int num
struct node *next
}slink /* 边或弧的结点类型 */
typedef struct
{ struct
{ ElemType vertex
slink *first
}ve[MAXVER] /* 顶点信息结构 */
int vex,edge,tag /* 存放顶点数、边数和图的类型 */
}adjlist /* 邻接表存储结构类型名 */
/* 建立图的邻接表存储表示。 */
void cregraph(adjlist *G,int n,int m) /* 建立邻接表. n为顶点数,m为图的类型 */
{ int i,e=0slink *p,*q,*schar x,y
G->vex=n G->tag=m
for(i=0i
printf("Input edges(x-->y):") /* 用大写字母表示顶点 */
scanf("%c%c",&x,&y)
while(x!= &&y!= ) /* 输入边或弧,遇空格符结束 */
{ e /* 统计边或弧和数目 */
s=(slink *)malloc(sizeof(slink))
s->num=y-A /* 生成结点插入 */
if(G->ve[x-A].first==NULL)
{ G->ve[x-A].first=s
s->next=NULL
}
else
{ p=G->ve[x-A].firstq=p->next
while(q!=NULL&&s->num>q->num) {p=qq=q->next}
p->next=ss->next=q
}
if(!G->tag) /* m=0表示建立无向图的邻接表 */
{ s=(slink *)malloc(sizeof(slink))
s->num=x-A
if(G->ve[y-A].first==NULL)
{ G->ve[y-A].first=ss->next=NULL}
else
{ p=G->ve[y-A].firstq=p->next
while(q!=NULL&&s->num>q->num) { p=qq=q->next}
p->next=ss->next=q
}
}
scanf("%c%c",&x,&y)
}
G->edge=e
}
/* 输出用邻接表存储表示的图 */
void list(adjlist *G) /* 输出邻接表 */
{ int i slink *p
for(i=0i
{ printf("%d:%c--->",i,G->ve[i].vertex)
p=G->ve[i].first
while(p)
{ printf("=",p->num)
p=p->next
}
printf("
")
}
}
/* 对邻接表存储的图进行深度优先搜索算法 */
int visited[MAXVER 1] /* 顶点的访问标记数组 */
dfs(adjlist *G,int v) /* v是访问的起始点的下标 */
{ slink *p
visited[v]=1
printf("