如何在给定边数组的情况下执行深度优先搜索

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|) .