图Dijkstra:初始填充队列
Boost::graph Dijkstra : initially populating the queue
我使用boost::graph
和它的Dijkstra实现。
我想计算从一组顶点到另一组顶点的最短路径。我不想计算这些集合之间的所有可能路径
这个想法是这样的:我在一个有不同街道入口的建筑里。所以我可以从这些街道开始我的旅程。但是我只对最短的那条感兴趣。
如果我使用我自己的Dijkstra算法的实现,我就会做以下事情:
- 对于每个起始节点,距离映射到0
- 将起始节点加入优先队列
虽然使用boost::dijkstra_shortest_paths_no_init
很容易将距离图设置为0,但我不知道如何将节点添加到优先队列中。我查看了源代码,这似乎是不可能的。因此,我正在考虑定义我自己的Combine函子,如果我到达其中一个开始节点,它将返回0距离,但它看起来相当难看。
我可以创建一个虚拟节点,并从虚拟节点向起始节点添加边。但是,这会触发一些我希望避免的并发访问问题。
我是否错过了boost库中的一个可能性,或者有人知道一个聪明的解决方案。我还在考虑修补boost,以允许自定义初始化优先级队列。
我没有使用boost::graph,我希望有更好的知识的人会给一个更好的答案,但也许你可以创建一个图形类型包装现有的图,留下原始的未修改,但暴露给算法的视图,包括你的虚拟节点和边?如果不是,复制整个图是不是不可行的?
相关文章:
- boost::进程间消息队列引发错误
- 在c++中用vector填充一个简单的动态数组
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 如何使用用户输入在C++中正确填充2D数组
- Android NDK传感器向事件队列报告奇怪的间隔
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 如何找到大小'x'数组是否完全填充,在C++?
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 如何使用boost :: lockfree ::队列实体填充容器
- 8谜题代码.我的队列没有填充,我找不到错误的位置
- 用地址而不是数字填充队列
- 过度填充堆栈和队列容量(C )
- 填充一个无序的vector元素指针队列
- 图Dijkstra:初始填充队列
- SFML2鼠标::isButtonPressed填充事件队列
- c++尝试在自定义类中使用优先级队列,编译器抛出错误,为什么要尝试填充队列