Boost dijkstra_shortest_path中的自定义图形距离

Custom graph distance in Boost dijkstra_shortest_paths

本文关键字:自定义 图形 距离 path dijkstra shortest Boost      更新时间:2023-10-16

我知道其他人也问过类似的问题,但这次略有不同。

我需要将距离计算为距离根的权重和节点数的组合。

因此,如果图是A->20英尺B->10英尺-,那么通常情况下,您会将A->B-之间的距离计算为20英尺,将A->C-计算为30英尺,但我想放大跳过另一个节点的成本。

假设每次跳过另一个节点时,成本都会翻倍,因此A->B距离为20英尺,B->C的距离为10英尺,但A->C为20英尺+2*10英尺=40英尺

这可能与boost的Dijkstra的最短路径有关吗?

您可以通过自定义距离来实现这一点。

例如,您可以将每条边的成本增加一倍,但源自"源"的边除外。它可以通过一个具有operator[](edge_descriptor e) const的简单内联类"动态"实现。然后将这个类作为距离图传递给Dijkstra或其他最短路径算法。

对于某些应用程序,您希望每个节点都有固定的成本(例如"停车灯处的预期加权时间")。在这里,再次将这些节点权重保留在某个位置。然后定义一个内联类,该类在其operator[](edge e) const中添加边权重和该边源权重,除非边从Dijkstra"源"开始。最后,将此类对象作为Dijkstra距离图传递给您最喜欢的BGL例程。