图的深度优先搜索遍历
1.从顶点1出发,访问他,找到其第一个邻接点
2.递归
3.直到所有的顶点都被访问
//定义邻接图
#define MAXSIZE 100
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
int info;
}//边表
typedef struct VNode
{
char data;
ArcNode *firstarc;
}//表头结点表
typedef struc
{
VNode adjlist[MAXSIZE];
int vertex,edge;
}
typedef enum{TRUE,FALSE}Bool;
Bool visited[MAXSIZE];//访问标记,查看是否已经访问过
void DFS(AGraph *G,int v)
{//从v顶点开始对图G进行DFS
ArcNode *p;
visited[v]=TRUE;//置为已访问过,避免重复访问
Visit(v);//访问v结点,一般输出v结点的信息即可
p=adjlist[v]->firstarc;
while(p!=NULL)
{
if(!visited[p->adjvex])DFS(G,p->adjvex);
p=p->nextarc;
}
}
void DFS_travers_Graph(AGraph *G)
{
int n;
for(n=0;n<G->vertex;n++)
visited[n]=FALSE;
for(n=0;n<G->vertex;n++)
if(!visited[n])DFS(G,n);
}