具有单源和接收器的DAG

时间:2012-03-25 20:24:49

标签: algorithm

我必须编写一个算法,在单个源和单个接收器中找到DAG中的路径... 我真的不知道该怎么做(尝试使用DSF和拓扑排序,但没有...) 我不希望任何人为我解决它,只是一些指导。

谢谢

1 个答案:

答案 0 :(得分:0)

BFS找到一般未加权图中的最短路径 - 特别是在DAG中[因为它也是图表]。编码也很简单。

请注意,DFS会找到一条路径 - 但它不一定是最短路径。

您可能还想查看this post以了解如何在运行后从BFS获取实际路径。

编辑:根据您的评论,您似乎需要O(|V|)解决方案,而且不必是最短的。因此,DFS的修改是这样做的,因为DAG具有单个源和单个接收器,来自源的每个路径到达接收器

请注意,由于您的图是一个DAG,并且因为我们确定了来自源的每个路径到达接收器,所以在探索某个路径后不需要向后[因此不需要递归或堆栈]。

伪码:

modifiedDFS(source,target):
  map <- new map
  current <- source
  while (current != target):
    next <- current.getNextVertex() //just chose an arbitrary edge and follow it, doesn't matter which
    map.put(next,current) //we "discovered" next by following current
    current <- next

运行此算法后,您需要将目标中的地图跟回到 来源 - 你得到的实际路径[反过来]

复杂性确实是O(n),因为我们最多访问一个节点一次。为了维护O(n),地图必须是哈希图[而不是树图]。如果枚举顶点 - 您甚至可以将地图实现为数组。