图的基本算法
在描述某一给定图G=(V,E)上的一个图算法的运行时间时,通常以图中的顶点数|V|和边数|E|来度量输入的规模
用V[G]来表示一个图G的顶点集,用E[G]来表示其边集
图的搜索技术是图算法领域的核心
图的表示:
要表示一个图G=(V,E),有两种标准的方法,即邻接表和邻接矩阵,这两种表示法既可以用于有向图,也可以用于无向图
通常采用邻接表表示法
图G=(V,E)的邻接表表示由一个包含|V|个列表的数组Adj所组成,其中每个列表对应于V中的一个顶点,每个和V相连的边都包 含在Adj数组中,
如果G是一个有向图,则所有邻接表的长度之和为|E|,
如果G是一个无向图,所有邻接表的长度之和为2|E|
不论是有向图还是无向图,邻接表表示法都有一个很好的特性,即它所需要的存储空间为θ(V+E)
邻接表稍作变动,即可用来表示加权图,即每条边都有着相应权值的图
邻接表表示法也有着潜在的不足之处,即如果要确定图中边(u,v)是否存在,只能在顶点u的邻接表Adj[u]中搜索v,
可以通过图的邻接矩阵表示法来弥补,但要以占用更多的存储空间作为代价
广度优先搜索:
广度优先搜索是最简单的图搜索算法之一,也是很多重要的图算法的原型
在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G中的边,以期发现可从s到达的所有顶点,并计算s到所有这些可达顶点之间的距离。该搜索算法同时还能生成一棵根为s、且包括所有s的可达顶点的广度优先树。对从s可达的任意顶点v,广度优先树中从s到v的路径对应于图G中从s到v的一条最短路径,即包含最少边数的路径。该算法对有向图和无向图同样适用
该搜索算法之所以称为广度优先搜索,因为算法首先会发现和s距离为k的所有顶点,然后才会发现和s距离为k+1的其他顶点
为了记录搜索的轨迹,广度优先搜索将每个顶点都着色为白色、灰色或黑色。开始时,所有顶点都是白色,随着搜索的进行,各顶点会逐渐变成灰色,然后称为黑色。与黑色顶点相邻的所有顶点都是已经被发现的,灰色顶点可能会有一些白色的相邻顶点,他们代表了已发现与未发现顶点之间的边界。
广度优先搜索构造了一棵广度优先树,如果u处于树中从根s到顶点v的路径中,那么u称为v的祖先,v是u的后裔
深度优先搜索:
对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续探测下去,当顶点v的所有边都已被探寻过后,搜索将回溯到发现顶点v有起始点的那些边,知道所有的顶点都已被发现时为止
深度优先搜索的先辈子图形成了一个由数棵深度优先树所组成的深度优先森林
在深度优先搜索过程中,开始时,每个顶点均为白色,搜索中被发现时即置为灰色,结束时又被置为黑色

浙公网安备 33010602011771号