图深度优先搜索
dfsearch
和bfsearch
将无向图与有向图同等对待。结点之间的无向边年代
和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” |
Edge连接到以前发现的节点 |
“edgetofinished” |
边连接到一个完成的节点 |
有关的更多信息,请参见输入参数描述事件
.
请注意
如果输入图包含从起始节点无法到达的节点,则“重启”
选项提供了一种方法,使搜索访问图中的每个节点。在这种情况下“startnode”
Event表示每次重新启动搜索时的起始节点。