图的遍历——深度优先遍历——邻接表

/*图的遍历——深度优先遍历——邻接表*/
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100 /*最大顶点数*/
typedef char VertexType;    /*顶点*/
typedef int EdgeType;   /*边上的权值*/
typedef int Boolean;    /*Boolean是布尔类型,其值为TURE和FALSE*/
Boolean visited[MAXVEX];    /*访问标志的数组*/
typedef struct EdgeNode     /*边表结点*/
{
    int adjvex;     /*邻接点域,存储该顶点对应的下标*/
    EdgeType weight;    /*用于存储权值,对于非网图可以不需要*/
    struct EdgeNode * next;     /*链域,指向下一个邻接点*/
}EdgeNode;

typedef struct VertexNode   /*顶点表结点*/
{
    VertexType data;    /*顶点表结点*/
    EdgeNode * firstedge;   /*边表头指针*/
}VertexNode,AdjList[MAXVEX];

typedef struct 
{
    AdjList adjList;
    int numVertexes,numEdge;    /*图中当前顶点数和边数*/
}GraphAdjList;


/*邻接表的深度优先递归算法*/
void DFS(GraphAdjList * GL,int i)
{
    EdgeNode * P;
    visited[i]=true;
    printf("%c",GL->adjList[i].data);   /*打印顶点,也可以是其他操作*/
    P=GL->adjList[i].firstedge;
    while(P)
    {
        if(!visited[P->adjvex])
            DFS(GL,P->adjvex);  /*对未访问的邻接点递归调用*/
        P=P->next;
    }
}


/*邻接表的深度遍历操作*/
void DFSTraverse(GraphAdjList * GL)
{
    int i;
    for(i=0;i<GL->numVertexes;i++)
        visited[i]=false;   /*初始化所有的顶点状态都是未访问过状态*/
    for(i=0;i<GL->numVertexes;i++)
        if(!visited[i]) /*对未访问过的顶点调用DFS,若是连通图,则只执行一次*/
            DFS(GL,i);  
}

int main()
{
    return 0;
}
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/cckevincyh/article/details/45955713
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞