图深度优先搜索
dfsearch
和bfsearch
将无向图与有向图同等对待。结点之间的无向边S.
和T.
被处理像两个有向边,从一个S.
来T.
和一个从T.
来S.
.
深度优先搜索算法从起始节点开始,S.
,并检查邻居S.
具有最小节点索引。那么该邻居,它会检查其索引的下一个未被发现的邻居。这样继续下去,直到搜索遇到其邻居都被访问过的节点。在这一点上,沿路径有一个未被发现的邻居最近先前发现的节点搜索回溯。这个过程一直持续,直到可达从起始节点的所有节点都被访问。
在伪代码中,(递归)算法可以写为:
事件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表示每次重新启动搜索时的起始节点。