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

/*图的遍历——深度优先遍历——邻接表*/
#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;
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值