c++ - Boost dijkstra_shortest_paths 中的自定义图形距离

标签 c++ boost customization dijkstra boost-graph

我认识其他人have asked similar questions但这个略有不同。

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

因此,如果图表是A->20 ft->B->10 ft->C 那么通常您会计算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 例程。

关于c++ - Boost dijkstra_shortest_paths 中的自定义图形距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28775491/

相关文章:

c++ - 使用 Boost 的耗时(以秒为单位)

css - 为大量用户定制CSS

android - 将 AdMob 横幅样式更改为自定义

c++ - 带有 GUI 的 Python、Perl 和 C/C++

c++ - 使用带有自定义参数的重载删除运算符

c++ - 在 C++ 中,我是否需要在关闭程序之前释放内存

iphone - 在 UINavigationBar 上放置一个大 Logo 作为标题 View - iOS

c++ - boost 进程间互斥并检查放弃

c++ - Boost被认为有害吗?

c++ - boost::combine,基于范围的和结构化绑定(bind)