深度优先图搜索
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
可以返回标志来描述算法中的不同事件,例如发现新节点或访问节点的所有传出边缘时。此处列出了事件标志。
国旗事件 | 事件描述 |
---|---|
“discornode” |
发现新节点。 |
“finishnode” |
所有从节点发出的边都被访问过。 |
“startnode” |
此标志指示搜索中的起始节点。 |
“edgetonew” |
边连接到未发现的节点 |
“edgetodiscovered” |
Edge连接到以前发现的节点 |
“edgetofinished” |
边连接到一个完成的节点 |
有关详细信息,请参见的输入参数说明事件
.
请注意
如果输入图包含从起始节点无法访问的节点,则“重启”
选项提供了一种方法,使搜索访问图中的每个节点。在这种情况下“startnode”
Event表示每次重新启动搜索时的起始节点。