以无向图为例 邻接矩阵,该邻接矩阵纵坐标(i)为访问的起点,而横坐标(j)代表访问终点
(1)起点为2,先将Visited数组(Bool)当中,表示为2的结点,标记为1,代表已经访问 (2)查看纵坐标i=2的行,其中横坐标j=1的列,发现邻接矩阵对应值为1,说明点2的邻接点1,还没有被访问,于是我们访问点1 (4)访问点1,Visited数组(Bool)当中,表示为2的结点,标记为1,再跳转到i=1的行,横坐标i=2,但点2已经被访问,而i=3,点3还没有被访问 (4)访问点3,同理,重复步骤(邻接矩阵中,值为1,但没有被访问的点) (5)访问点5 ,但i=5的行中,j=2,3(点2,点3)均被访问过,回退到i=3的行 (6)i=3的行,也全访问了,回退到i=1的行,发现j=4还没有被访问过 (7)访问点4 (8)访问点6,访问完i=6的行,发现全访问过了,回退到点4,点1,点2的行 (9)回到点2的行后,发现全访问了,深度优先遍历结束
对于上图中AMGraph G(图的邻接矩阵存储结构)定义如下:
# define MaxVertexNum 100 //顶点(结点)数目的最大值 typedef char VertexType; //顶点的数据类型 typedef int EdgeType; //带权图中边上权值的数据类型(这里指邻接矩阵的权值的数据类型,如0,1) typedef struct{ VertexType Vex[MaxVertexNum]; //顶点表,结点的值,如结点值为1 EdgeType Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵,描述边关系的表 int vexnum,arcnum; //图当前顶点数和边(弧)数 }AMGragh参考链接 https://www.bilibili.com/video/BV1qt411171s?from=search&seid=3497279112733240296
此文章,图的定义代码实现,有所不同 https://blog.csdn.net/qq_35385687/article/details/90453458?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param