和树的遍历类似,图的遍历(traversing Graph)是指从图中某个顶点出发,按序访问图中所有顶点,且使图中的每个顶点仅被访问一次的过程。按图中结点的访问路径不同,图的遍历分为两种:深度优先搜索和广度优先搜索。
深度优先搜索(Depth-First Search)遍历类似于树的先根遍历,是树的先根遍历的推广。
图的深度优先搜索遍历过程为:从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问过的结点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。
类似于老师家访每一个学生,出发访问学生A之后,再访问A介绍的另一个没有访问过的学生B,再访问B介绍的另一个没有访问过的学生C,如果B学生能介绍的学生全都访问过了,再回到学生A家,让学生A再介绍新的没有访问过的学生,当访问过的学生都不能提供新的没访问过的学生,而且还要应该要访问的学生,说明剩下的没访问的学生不在访问过的学生的联络范围之内,则应另找一个出发访问点,即另外一个连通分量。
广度优先搜索(Breadth-First Search)遍历类似于树的层次遍历。
图的广度优先搜索遍历过程为:从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。换句话说,广度优先搜索遍历图的过程中以v0为起始点,由近至远,依次访问和v0有路径相通且路径长度为1,2,…的顶点。
类似于老师家访每一个学生,出发访问学生A之后,按一定顺序记录下学生A所能介绍的全部学生家地址,假设是BCDE,再访问A介绍的第一个没有访问过的学生B,照样在记录本的BCDE的E的后面记录下学生B所能介绍的没有访问过的全部学生家地址,假设是FGH,再访问应该是按照记录本上的顺序A介绍的第二个没有访问过的学生C,照样在记录本的BCDEFGH的H的后面记录下学生C所能介绍的没有访问过的全部学生家地址,以此类推,直到记录本上学生的学生全都访问过了,还有没访问过的学生,说明剩下的没访问的学生不在访问过的学生的联络范围之内,则应另找一个出发访问点,即另外一个连通分量。

