1 .深度优先检索的介绍
的深度优先搜索(Depth First Search )与树的首次扫描比较相似。
这就是说,假设初始状态为图中的所有顶点未被访问,则从某个顶点v出发,首先访问该顶点,然后从该未被访问的各邻接点依次搜索扫描图,直到图中的v和路径相通的所有顶点被访问如果其他顶点没有访问该时尚,请选择其他未访问的顶点作为起点,然后重复上述步骤,直到图中的所有顶点都被访问。
很明显,深度优先搜索是一个递归的过程。
2 .深度优先搜索的图解
2.1有向图的深度优先搜索
以下,以“无向图”为例,进行深度优先搜索的演示。
从顶点a开始对上图G1进行深度优先的扫描。
步骤1 :访问a。
访问步骤2 () a的相邻接点) c。
在步骤1中访问了a之后,接下来应该访问的是a的邻接点,即‘c、d、f’中的任意一个。 但是,在本论文的安装中,顶点ABCDEFG被顺序存储,c在' d和f '之前,因此先访问c。
访问步骤3 () c的相邻接点) b。
在步骤2中访问了c之后,接下来应该访问c的邻接点,即‘b’和‘d’中的某一个(不包括a已经被访问的情况)。 因为b将在d之前访问b。
步骤4 :访问(c的相邻点) d。
在步骤3中访问了c的邻接点b之后,在b中没有未被访问的邻接点; 因此,访问c返回另一个相邻点d。
步骤5 :访问(a的相邻点) f。
之前访问a,' a的相邻点b的所有相邻点(包括递归的相邻点) ); 因此,在这种情况下,返回到接入a的另一个相邻点f。
步骤6 :访问(f的相邻点) g。
步骤7 :访问(g的相邻点) e。
因此,访问顺序为A - C - B - D - F - G - E
2.2有向图的深度优先搜索
以下,以“有向图”为例,进行深度优先搜索的演示。
从顶点a开始对上图G2进行深度优先的扫描。
步骤1 :访问a。
第二步:访问b
访问了a之后,下一个应该访问的是a出口边的另一个顶点,即顶点b。
第三步:访问c
访问了b之后,下一个应该访问的是b的出边的另一个顶点,即顶点c、e、f。 在本文实现的图中,顶点ABCDEFG按顺序被存储,因此先访问c。
第四步:访问e。
接着访问c的出边的另一个顶点,即顶点e。
第五步:访问d
接着访问e出边的另一个顶点,即顶点b、d。 由于顶点b已经被访问过了,所以要访问顶点d。
第六步:访问f
接下来,应该回到“a的出侧的另一个顶点f”。
步骤7 :访问g
因此,访问顺序为A - B - C - E - D - F - G
宽度优先检索的文字介绍
1 .广度优先搜索的介绍
宽度优先搜索算法(Breadth First Search )也称为“宽度优先搜索”或“横向优先搜索”,简称为BFS。
这是从图中的某顶点v出发,访问v后,依次访问v的未访问的各相邻点,从这些相邻点依次访问各自的相邻点,“先被访问的顶点的相邻点比后被访问的顶点的相邻点先被访问,直到图中所有被访问的顶点的相邻点被访问为止。 如果此时图形的顶点还没有被访问,则必须选择另一个未被访问的顶点作为新的起点,然后重复上述步骤,直到图形的所有顶点都被访问。
换言之,宽度优先搜索扫描图的过程是以v为起点,从近到远,依次访问与v路径相通、且路径长度为1、2 .的顶点。
2 .广度优先搜索的图解
2.1有向图的广度优先搜索
下面,我们以“无向图”为例,就广度优先搜索进行演示。 还是以上图G1为例进行说明。
153890780454688ba4421ea?from=pc">第1步:访问A。
第2步:依次访问C,D,F。
在访问了A之后,接下来访问A的邻接点。前面已经说过,在本文实现中,顶点ABCDEFG按照顺序存储的,C在"D和F"的前面,因此,先访问C。再访问完C之后,再依次访问D,F。
第3步:依次访问B,G。
在第2步访问完C,D,F之后,再依次访问它们的邻接点。首先访问C的邻接点B,再访问F的邻接点G。
第4步:访问E。
在第3步访问完B,G之后,再依次访问它们的邻接点。只有G有邻接点E,因此访问G的邻接点E。
因此访问顺序是:A -> C -> D -> F -> B -> G -> E
2.2 有向图的广度优先搜索
下面以"有向图"为例,来对广度优先搜索进行演示。还是以上面的图G2为例进行说明。
第1步:访问A。
第2步:访问B。
第3步:依次访问C,E,F。
在访问了B之后,接下来访问B的出边的另一个顶点,即C,E,F。前面已经说过,在本文实现中,顶点ABCDEFG按照顺序存储的,因此会先访问C,再依次访问E,F。
第4步:依次访问D,G。
在访问完C,E,F之后,再依次访问它们的出边的另一个顶点。还是按照C,E,F的顺序访问,C的已经全部访问过了,那么就只剩下E,F;先访问E的邻接点D,再访问F的邻接点G。
因此访问顺序是:A -> B -> C -> E -> F -> D -> G