我有一个问题,即在正加权有向无环图中找到最短路径,但是限制了最大N步数(路径中的边) . 假设路径存在 . 该图的附加属性是如果边(i,j)在图中,那么任何边(i,k)也在i <k <j的图中 . 我只对图的开始和结束之间的最短路径感兴趣(在拓扑排序之后) .
我知道有一种有效的算法用于O(V E)中有向无环图中的最短路径,但它没有考虑步长限制 . 我想不出任何方法可以使它成为O((V E)* N),但这将是理想的性能,因为它应该足以处理1000个节点和100个步骤的图形 .
例如,考虑以下graph .
问题是找到最多使用k = 3步(边)的最短路径 . 答案是6(路径1-> 4-> 5-> 6) .
1 回答
它实际上是
O(N + M)
,其中N
是顶点数,M
是边数 . 您可以在此处找到更多信息:http://www.geeksforgeeks.org/shortest-path-for-directed-acyclic-graphs/找到路径(我正在使用geeksforgeeks的代码):而不是
int dist[V]
使用pair<int, int> dist[V]
. 最初dist[S] = {0, -1}
. 所以在这种情况下if (dist[i->getV()].first > dist[u].first + i->getWeight())
你需要将父设置为dist[i->getV()] = {dist[u].first + i->getWeight(), u}
.然后使用此递归代码恢复路径:
用
restore(FINAL_POINT)
调用它