对于课堂作业,我发现自己在图表中有一组边缘。我想知道是否可以在此图表上执行DFS而不将数据转换为一组顶点。
答案 0 :(得分:0)
对于DFS
以及BFS
,您需要一个数据结构,通过来源提供对边缘的访问。
所以需要这样的方法:
Edge getOutgoingEdge(source)
如果您只有一组所有边缘,则在跟随第一条边后,您将无法获取要处理的下一条边。假设您遍历了一条边a -> b
,那么您关注的下一条边必须是b -> c
种。因此,您需要某种为每个源提供边缘的结构:
getOutgoingEdge(b)
如果您没有,需要在之前构建它,方法是遍历集合中的所有边缘并创建某种Map
source -> {e edge | alpha(e) = source}
(其中{{ 1}}表示边缘的来源。)
您可以构建此地图动态,即在找到alpha(e)
的下一个边后停止,但复杂性仍为DFS
。