当使用Lemon时,可以运行具有多个源的Dijkstra--在我的情况下总是两个开始节点和两个终点节点 - 并且一旦达到任何目标就停止提前。 例如,以下代码对我很有用:
template<class Graph, class Node, class CostMap>
double shortestPath(Node from1, Node from2, Node to1, Node to2,
const Graph &graph, const CostMap &costs)
{
lemon::Dijkstra<Graph, CostMap> dijkstra(graph, costs);
dijkstra.init();
dijkstra.addSource(from1);
dijkstra.addSource(from2);
while (!dijkstra.emptyQueue())
{
dijkstra.processNextNode();
if (dijkstra.processed(to1) || dijkstra.processed(to2))
return ...;
}
return -1;
}
现在我想知道如何用BGL做同样的事情。
到目前为止,我通过在BGL FAQ中描述的任何到达节点之后抛出异常来实现早期停止。 我仍然在与多个来源部分斗争,不幸的是BGL文档不是很有帮助。 这个discussion暗示人们至少会想到这个问题,尽管它似乎还没有实现。
这可能与BGL有关吗?