如何在给定边数组的情况下执行深度优先搜索
How to perform a depth first search given an array of edges
对于 class 作业,我发现自己在图中有一组边。我想知道是否可以在不将数据转换为一组顶点的情况下对该图执行 DFS。
对于 DFS
以及 BFS
,您需要一个数据结构,它通过 source.
提供对边的访问
所以需要这样的方法:
Edge getOutgoingEdge(source)
如果您只有一组所有边,您将无法在遵循第一个边后获取下一个边进行处理。假设您遍历了一条边 a -> b
,那么您遵循的下一条边必须属于 b -> c
。因此,您需要某种结构来为每个源提供边缘:
getOutgoingEdge(b)
如果你没有这样的,你需要先构建它通过遍历集合中的所有边并创建某种Map
source -> {e edge | alpha(e) = source}
(其中 alpha(e)
表示边缘的来源)。
您可以动态构建此地图,即一旦找到 DFS
的下一条边就停止,但复杂度仍为 O(|E|)
.
对于 class 作业,我发现自己在图中有一组边。我想知道是否可以在不将数据转换为一组顶点的情况下对该图执行 DFS。
对于 DFS
以及 BFS
,您需要一个数据结构,它通过 source.
所以需要这样的方法:
Edge getOutgoingEdge(source)
如果您只有一组所有边,您将无法在遵循第一个边后获取下一个边进行处理。假设您遍历了一条边 a -> b
,那么您遵循的下一条边必须属于 b -> c
。因此,您需要某种结构来为每个源提供边缘:
getOutgoingEdge(b)
如果你没有这样的,你需要先构建它通过遍历集合中的所有边并创建某种Map
source -> {e edge | alpha(e) = source}
(其中 alpha(e)
表示边缘的来源)。
您可以动态构建此地图,即一旦找到 DFS
的下一条边就停止,但复杂度仍为 O(|E|)
.