1 / 72
文档名称:

图的各种算法(深度、广度等).ppt

格式:ppt   页数:72页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

图的各种算法(深度、广度等).ppt

上传人:xyb333199 2015/5/22 文件大小:0 KB

下载得到文件列表

图的各种算法(深度、广度等).ppt

相关文档

文档介绍

文档介绍:图算法
从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。
一、深度优先搜索遍历图
连通图的深度优先搜索遍历
V1
V2
V4
V5
V3
V7
V6
V8

深度遍历:V1 V2 V4  V8 V5 V6 V3 V7
SG1
SG2
SG3
W1、W2和W3 均为 V 的邻接点,SG1、SG2 和 SG3 分别为含顶点W1、W2和W3 的子图。
访问顶点 V ;
for (W1、W2、W3 )
若该邻接点W未被访问,
则从它出发进行深度优先搜索遍历。
V
w1
w3
w2
从上页的图解可见:
1. 从深度优先搜索遍历连通图的过程类似于树的先根遍历;
解决的办法是:为每个顶点设立一个“访问标志 visited[w]”;
2. 如何判别V的邻接点是否被访问?
6
DFS算法框架:
递归写法:(较常用)
DFS(NODE N)
{
FOR N的每一个邻接结点V
{
IF(V还没有被搜索过)
DFS(V);
}
}
void DFS(Graph G, int v) {
// 从顶点v出发,深度优先搜索遍历连通图 G
visited[v] = TRUE; VisitFunc(v);
for(w=FirstAdjVex(G, v);
w!=0; w=NextAdjVex(G,v,w))
if (!visited[w]) DFS(G, w);
// 对v的尚未访问的邻接顶点w
// 递归调用DFS
} // DFS
二、广度优先搜索遍历图
V
w1
w8
w3
w7
w6
w2
w5
w4
对连通图,从起始点V到其余各顶点必定存在路径。
其中,V->w1, V->w2, V->w8
的路径长度为1;
V->w7, V->w3, V->w5
的路径长度为2;
V->w6, V->w4
的路径长度为3。
w1
V
w2
w7
w6
w3
w8
w5
w4
从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。
若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
V1
V2
V4
V5
V3
V7
V6
V8

广度遍历:V1 V2 V3  V4 V5 V6 V7 V8