图的遍历
深度优先遍历
实质上是对某个顶点查找其邻接点的过程。
a. 设置搜索指针p,使p指向顶点v;
b. 访问p所指顶点,并使p指向与其相邻接的且尚未被访问过的顶点;
c. 若p所指顶点存在,则重复步骤b,否则执行步骤d;
d. 沿着刚才访问的次序和方向回溯到一个尚未有邻接顶点且未被访问过的顶点,并使p指向这个未被访问过的顶点,然后重复步骤b,直至所有的顶点均被访问为止。
广度优先遍历
从图中某个顶点v出发,在访问了v之后依次访问v的各个未被访问过的邻接点,然后分别从这些临界点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时还有未被访问的顶点,则另选图中的一个未被访问的顶点做为起点,重复上述过程,直至图中所有的顶点都被访问到为止。
广度优先遍历的特点是尽可能先进行横向搜索,即最先访问的顶点的邻接点也被访问。
上图的深度优先遍历:v1,v2,v5,v3,v6,v4;
广度优先遍历:v1,v2,v3,v4,v5,v6;
v1,v4,v3,v2,v6,v5;