我必须编写一个算法,在单个源和单个接收器中找到DAG中的路径... 我真的不知道该怎么做(尝试使用DSF和拓扑排序,但没有...) 我不希望任何人为我解决它,只是一些指导。
谢谢
答案 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)
,地图必须是哈希图[而不是树图]。如果枚举顶点 - 您甚至可以将地图实现为数组。