dfs遍历图

DFS是一种图遍历算法,沿着路径深入到无法前进时再回溯。它用于确定图中任意两点间的可达性。本文介绍了连通分量和强连通分量的概念,并阐述了DFS如何遍历连通图和非连通图,强调了邻接表版DFS的实现。
摘要由CSDN通过智能技术生成

dfs是以深度为第一关键词
每次都沿着路径到不能再前进时
才退回到最近的岔道口

沿着一条路径直到无法继续前进
才退回到路径上里当前顶点最近的&还存在未访问的岔道口
并前往访问那些未访问的分支顶点
直到遍历完这个图

dfs的具体实现
2个概念:
1)连通分量:

2个顶点联通:2个顶点之间可以互相到达(无向图中)
====》
联通图:图G(V,E)的任意2个顶点都联通(无向图)

连通图的连通分量一个,
但是非联通图的联通分量有多个

在这里插入图片描述
在这里插入图片描述
连通分量:极大的联通子图
link

在这里插入图片描述

求图的连通分量的目的,
是为了确定从图中的一个顶点是否能到达图中的另一个顶点,
也就是说, 图中任意两个顶点之间是否有路径可达。

对于连通图,
从图中任一顶点出发遍历图,
可以访问到图的所有顶点,
即连通图中任意两顶点间都是有路径可达的。

2)强连通分量:
2个顶点强连通:2个顶点可以各自通过一条有向路径到达另一个顶点(有向图)

构成一个单向循环

强连通图:图G(V,E)的任意2个顶点都强连通(有向图)
强连通分量:极大强连通子图


我们把联通分量和强连通分量都叫做:连通块

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要定义一个邻接表存储的数据结构,包含顶点和边的相关信息。 ```c #define MAX_VERTEX_NUM 100 // 最大顶点数 // 边表结点 typedef struct ArcNode { int adjvex; // 邻接点在顶点数组中的下标 struct ArcNode *next; // 指向下一条边的指针 } ArcNode; // 顶点表结点 typedef struct VNode { char data; // 顶点的数据 ArcNode *firstarc; // 指向第一个邻接点的指针 } VNode, AdjList[MAX_VERTEX_NUM]; // 邻接表结构 typedef struct { AdjList vertices; // 顶点表 int vexnum, arcnum; // 的当前顶点数和边数 } ALGraph; ``` 接下来,就可以开始实现FirstAdjVex函数和NextAdjVex函数了。 ```c // 获取顶点v的第一个邻接点 int FirstAdjVex(ALGraph *G, int v) { if (v < 0 || v >= G->vexnum) { return -1; } ArcNode *p = G->vertices[v].firstarc; if (p != NULL) { return p->adjvex; } return -1; } // 获取顶点v相对于顶点w的下一个邻接点 int NextAdjVex(ALGraph *G, int v, int w) { if (v < 0 || v >= G->vexnum || w < 0 || w >= G->vexnum) { return -1; } ArcNode *p = G->vertices[v].firstarc; while (p != NULL && p->adjvex != w) { p = p->next; } if (p != NULL && p->next != NULL) { return p->next->adjvex; } return -1; } ``` 这里的FirstAdjVex函数比较简单,直接返回顶点v的第一个邻接点的下标。如果v不存在或者没有邻接点,则返回-1。 NextAdjVex函数稍微复杂一些。首先,需要找到顶点v相对于顶点w的第一个邻接点,也就是w在v的邻接点链表中的下一个邻接点。在找到这个邻接点之后,再返回它之后的下一个邻接点。如果v或w不存在,或者w不是v的邻接点,则返回-1。 以上就是DFS遍历中,FirstAdjVex函数和NextAdjVex函数的c语言实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值