主要内容

dfsearch

图深度优先搜索

描述

例子

v= dfsearch (G,年代)适用于深度优先搜索到图G从节点年代。结果是一个向量的节点id为了他们的发现。

例子

T= dfsearch (G,年代,事件)定制输出萎靡不振的深度优先搜索的一个或多个搜索事件。例如,T = dfsearch (G s allevents)返回一个表,其中包含所有标记事件X = dfsearch (G s edgetonew)返回一个矩阵或单元阵列的边缘。

(T,E)= dfsearch (G,年代,事件)此外返回一个向量的边缘指数E事件被设置为“edgetonew”,“edgetodiscovered”,或“edgetofinished”。边的边缘指数用于唯一标识油印。

例子

(___)= dfsearch (___“重启”,特遣部队),在那里特遣部队真正的,重新启动搜索如果没有发现的新节点是可及节点。您可以使用任何的输入或输出参数组合在以前的语法。这个选项确保深度优先搜索到所有节点和边的图,即使他们不是从起始节点访问年代

例子

全部折叠

创建和绘制图表。

s = [1 1 1 1 2 2 2 2 2];t = 5 4 2 6 10 7 9 8 [3];图G = (s, t);情节(G)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

执行图的深度优先搜索开始节点7。结果表明节点发现的顺序。

v = dfsearch (G, 7)
v =10×11 2 3 4 5 6 7 8 9 10

创建和策划一个有向图。

一个= [0 1 0 1 1 0 0;0 0 0 0 0 0 0;0 0 0 1 0 1 1;0 0 0 0 0 1 0;0 0 0 0 0 0 0;0 0 0 0 0 0 0;0 0 0 0 0 0 0];G =有向图(一个);情节(G)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

执行图的深度优先搜索开始节点3。指定“allevents”返回一个表包含所有事件的算法。

T = dfsearch (G, 3,“allevents”)
T =13×4表___ _____ _____ startnode事件节点边EdgeIndex * * * 3 3南南南南南南discovernode edgetonew南3 4 4 discovernode南南南edgetonew南4 6 7 discovernode 6南南南finishnode 6南南南南南南edgetofinished finishnode 4南3 6 5 edgetonew南3 7 6 discovernode 7南南南finishnode 7南南南南南南finishnode 3

跟随算法中的步骤,读表从上到下的事件。例如:

  1. 该算法在节点3开始

  2. 节点3和节点之间的边发现4

  3. 节点4发现

  4. 等等……

执行图的深度优先搜索多个组件,然后强调了基于搜索结果图的节点和边。

创建和策划一个有向图。这张图有两个弱连接组件。

s = [1 1 2 2 2 3 4 7 8 8 8 8];t = [3 4 7 5 6 2 6 2 9 10 11 12);G =有向图(s, t);p =情节(G,“布局”,“分层”);

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

c = conncomp (G,“类型”,“弱”)
c =1×121 1 1 1 1 1 1 2 2 2 2 2

执行图的深度优先搜索开始节点4,并标记“edgetonew”,“edgetodiscovered”,“edgetofinished”,“startnode”事件。指定重新启动作为真正的使搜索重启只要有剩余的节点不能达成。

事件= {“edgetonew”,“edgetodiscovered”,“edgetofinished”,“startnode”};T = dfsearch (G, 4、事件“重启”,真正的)
T =15×4表事件节点边EdgeIndex ___________ _____, _____ _____ startnode 4南南南edgetonew南4 6 7 startnode 1南南南edgetonew南1 3 1 edgetonew南3 2 6 edgetonew南2 5 3 edgetofinished南2 6 4 edgetonew南2 7 5 edgetodiscovered南7 2 8 edgetofinished南1 4 2 startnode 8南南南edgetonew南8 9 9 edgetonew南8 10 10 edgetonew南8 11 11 edgetonew南8 12 12

重新启动真正的,“startnode”事件返回信息,当重新启动搜索算法。

强调基于活动图:

  • 红颜色的起始节点。

  • 绿色的边缘“edgetonew”

  • 黑色的边缘“edgetofinished”

  • 洋红色的边是“edgetodiscovered”

突出(p,“边缘”T.EdgeIndex (T。事件= =“edgetonew”),“EdgeColor”,‘g’)突出(p,“边缘”T.EdgeIndex (T。事件= =“edgetofinished”),“EdgeColor”,“k”)突出(p,“边缘”T.EdgeIndex (T。事件= =“edgetodiscovered”),“EdgeColor”,“米”)突出(p, T.Node (~ isnan (T.Node)),“NodeColor”,“r”)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

做一个有向图无环通过逆转一些边缘。

创建和策划一个有向图。

s = [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10];t = [7 6 1 5 6 7 8 2 4 4 3 1 6 8 2);g =有向图(s, t);情节(g,“布局”,“力”)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

执行图的深度优先搜索,萎靡不振的“edgetodiscovered”事件。这个事件对应于边缘,完成一个循环。

[e, edge_indices] = dfsearch (g, 1,“edgetodiscovered”,“重启”,真正的)
e =3×23 1 6 4 8 7
edge_indices =3×13 9 11

使用flipedge扭转的方向标记边缘,不再让他们完成一个周期。这从图中删除所有的周期。使用isdag确认无环图。

gnew = flipedge (g, edge_indices);isdag (gnew)
ans =逻辑1

画出新的图形和突出的边缘了。

p =情节(gnew“布局”,“力”);突出(p,“边缘”findedge (gnew e (:, 2), e (: 1)),“EdgeColor”,“r”)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

输入参数

全部折叠

输入图,指定为一个有向图对象。使用创建一个无向图有向图创建一个有向图。

例子:图G = (1、2)

例子:2 G =有向图([1],[2 3])

开始节点,指定为这个表中的值之一。

价值 例子
标量节点索引 1
特征向量节点名 “一个”
字符串标量节点名 “一个”

例子:dfsearch (G, 1)

标记搜索事件,在下表中指定的选项之一。

  • 国旗单一事件,使用国旗的名称。

  • 国旗事件的一个子集,把两个或两个以上的标记名称进入细胞数组或字符串数组。

  • 国旗事件,使用“allevents”

请注意

这取决于的价值事件的输出dfsearch各不相同。看到最后一列在下表中返回的输出每个选项的信息。

的价值事件 描述 输出
“discovernode”(默认)

发现了一个新节点。

返回一个向量的节点id:

  • 如果年代是一个数字节点索引,那么向量包含数字节点指标。

  • 如果年代一个节点名,那么向量是一个细胞包含节点名数组。

“finishnode”

所有即将离任的边节点的访问。

“startnode”

这个标志表明起始节点搜索。

如果“重启”真正的,然后“startnode”旗帜的起始节点每次搜索重启。

“edgetonew”

边缘连接到一个未被发现的节点。

返回一个矩阵或单元阵列的大小N——- - - - - -2指定结束的边缘节点图:

  • 如果年代数字节点索引,那么矩阵包含数字节点指标。

  • 如果年代一个节点名,矩阵是一个细胞包含节点名数组。

此外,您可以指定第二个输出[T E] = dfsearch (…)返回一个向量的边缘指数E

“edgetodiscovered”

之前发现的节点连接到边缘。

“edgetofinished”

边缘连接到节点完成。

单元阵列

指定两个或两个以上的旗帜在单元阵列只有国旗在搜索这些事件。

返回一个表,T,其中包含的变量T.Event,T.Node,T.Edge,T.EdgeIndex:

  • T.Event是一个分类向量包含标记的顺序出现。

  • T.Node包含的节点ID对应节点的事件“discovernode”,“finishnode”,“startnode”

  • T.Edge包含事件对应的边缘“edgetonew”,“edgetodiscovered”,“edgetofinished”

  • T.EdgeIndex包含事件的边缘指数“edgetonew”,“edgetodiscovered”,“edgetofinished”。唯一标识的边缘指数重复边缘油印。

  • 未使用的元素T.NodeT.Edge

  • 如果年代是一个数字节点索引呢T.NodeT.Edge包含数字节点指标。

  • 如果年代是一个节点名,那么T.NodeT.Edge是单元数组包含节点名称。

“allevents”

所有事件都得到了关注。

例子:v = dfsearch (G, 3)在第三个节点开始搜索并返回一个向量,v,包含节点的发现。这是一样的v = dfsearch (G, 3,“discovernode”)

例子:X = dfsearch (G, A,“edgetonew”)开始节点命名“一个”并返回一个单元阵列的特征向量,X,显示的每个边缘连接到一个未知节点在搜索。

例子:T = dfsearch (G s {‘discovernode’,‘finishnode})返回一个表,T,但只有国旗时当发现新节点或节点标记为完成。

例子:T = dfsearch (G s allevents)标记所有搜索事件和返回一个表,T

数据类型:字符|字符串|细胞

重启切换搜索,指定为(默认)或真正的。这个选项是有用的,如果图包含从开始节点的节点。如果“重启”真正的重启,然后搜索时未发现的节点仍然是遥不可及的发现的节点。新开始节点的节点最小指数仍未被发现的。重启过程重复直到dfsearch发现所有节点。

“重启”默认情况下,只搜索访问节点可以从开始节点。

“重启”真正的,“discovernode”“finishnode”图中的每个节点事件发生一次。另外,图中每条边的标记一次“edgetonew”,“edgetodiscovered”,或“edgetofinished”。的边缘标记“edgetonew”形成一个或更多的树。

例子:T = dfsearch(图3[1],[2 - 4]),1,“重启”,真的)图中搜索两个连接组件。

数据类型:逻辑

输出参数

全部折叠

节点id,返回的格式如下:

  • 如果你使用一个数字节点ID指定起始节点,年代,然后v是一个数字列向量的节点指标。

  • 如果年代是一个特征向量或字符串包含一个节点名,然后呢v是一个单元向量包含节点名称。

的节点idv反映发现的顺序图的深度优先搜索。

搜索结果,返回的格式如下:

  • 如果事件没有指定或吗“discovernode”,“finishnode”,或“startnode”,然后T是一个向量的节点id相似吗v

  • 如果事件“edgetonew”,“edgetodiscovered”,或“edgetofinished”,然后T是一个矩阵或单元阵列的尺寸吗N——- - - - - -2表明源和目标节点为每个相关的边缘。

  • 如果事件是一个搜索事件或单元阵列“allevents”,然后T是一个包含标记搜索事件表。表包含搜索事件标志T.Event,相关节点idT.Node,相关的边缘T.EdgeT.EdgeIndex

在所有情况下:

  • 元素的顺序或行T表明它们出现在搜索顺序。

  • 如果您指定年代作为一个数字节点IDT也指节点使用他们的数字id。

  • 如果您指定年代作为一个节点名T也指节点使用他们的名字。

优势指标,作为一个向量返回。

指定这个输出矢量边缘指数的事件“edgetonew”,“edgetodiscovered”,或“edgetofinished”。的N——- - - - - -1向量的边缘指数符合T,这是一个矩阵或细胞大小的数组N——- - - - - -2表明源和目标节点为每个相关的边缘。

例子:[T E] = dfsearch (G,年代,“edgetonew”)

提示

  • dfsearchbfsearch对无向图一样的有向图。一个无向边节点之间年代t是当作两个定向边缘,一个来自哪里年代t和一个来自t年代

算法

深度优先搜索算法从起始节点开始,年代,检查你的邻居的年代有最小的节点索引。然后检查下一个未被发现的邻居,邻居指数最低的。这个过程一直持续到搜索遇到一个节点的邻居都被访问。在这一点上,沿着路径搜索回溯到最近的之前发现的节点有一个还没被发现的邻居。这一过程持续进行,直到所有的节点都可以从开始节点访问。

在伪代码,(递归)算法可以写成:

事件startnode (S)调用DFS (S)函数DFS (C)事件discovernode (C)边缘E C从外向的边缘节点,连接节点N事件edgetonew (C、E), edgetodiscovered (C、E)或edgetofinished (C, E)(取决于节点N)的状态如果事件是edgetonew叫DFS (N)结束结束事件finishnode (C)

dfsearch可以返回标记算法来描述不同的事件,如当一个新的节点发现或当所有节点的边的访问。这里列出的事件标志。

国旗事件 事件描述
“discovernode”

发现了一个新节点。

“finishnode”

所有即将离任的边节点的访问。

“startnode”

这个标志表明起始节点搜索。

“edgetonew”

边缘连接到一个未被发现的节点

“edgetodiscovered”

之前发现的节点连接到边缘

“edgetofinished”

边缘连接到节点完成

有关更多信息,请参见输入参数描述事件

请注意

在这种情况下,输入图包含节点从起始节点,遥不可及的“重启”选项提供了一种方法,使搜索访问图中的每个节点。在这种情况下,“startnode”事件表明起始节点每次搜索重启。

版本历史

介绍了R2015b