首页 > 编程知识 正文

图的深度优先搜索和广度优先搜索(深度广度优先遍历)

时间:2023-05-04 21:45:46 阅读:94198 作者:3943

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。