深度优先图搜索
dfsearch
而且bfsearch
将无向图视为有向图。节点之间的无向边年代
而且t
被处理成两条有向边,一条来自年代
来t
还有一个来自t
来年代
.
深度优先搜索算法从起始节点开始,年代
,并检查的邻居年代
它的节点索引最小。然后,对于该邻居,它检查下一个索引最低的未发现邻居。这一直持续下去,直到搜索遇到一个其所有邻居都被访问过的节点。此时,搜索将沿着路径回溯到之前发现的最近的节点,该节点具有未发现的邻居。这个过程将继续进行,直到访问了从开始节点可访问的所有节点为止。
在伪代码中,(递归)算法可以写成:
事件开始节点(S)调用DFS(S)函数DFS(C)事件发现节点(C) FOR边缘E从节点C的出边缘,连接到节点N事件edgetonnew (C,E), edgetodiscovered(C,E)或edgetofinished(C,E)(取决于节点N的状态)IF事件是edgetonnew调用DFS(N) END END事件结束节点(C) END
dfsearch
可以返回标记来描述算法中的不同事件,例如当发现新节点时,或者当节点的所有出边都已被访问时。事件标志列在这里。
国旗事件 | 事件描述 |
---|---|
“discovernode” |
已发现新节点。 |
“finishnode” |
该节点的所有出边都已被访问。 |
“startnode” |
该标志表示搜索中的开始节点。 |
“edgetonew” |
Edge连接到未发现的节点 |
“edgetodiscovered” |
Edge连接到先前发现的节点 |
“edgetofinished” |
Edge连接到已完成的节点 |
的输入参数描述,以获取更多信息事件
.
请注意
如果输入图包含从起始节点无法到达的节点,则使用“重启”
选项提供了一种使搜索访问图中的每个节点的方法。在这种情况下,“startnode”
Event表示每次重新开始搜索时的开始节点。