【发布时间】:2015-07-30 20:51:45
【问题描述】:
我正在尝试编写一个在网格上运行的算法。它类似于 Dijkstra 的算法,但略有不同。
网格中的每个点要么被占用,要么空闲。我想检查距离起点小于一定距离的所有可到达点。
我假设我可以分别以 1 和 sqrt(2) 的成本平行于网格线或对角线行进。
最简单的方法是如果我有一个按值排序的地图。这样我可以将键设置为每个点的坐标,并将值设置为到目前为止计算的到该点的距离。我只需要弹出距离最小的条目,然后查找并更新邻居点的到目前为止距离。
这样的容器不存在,所以我一直在考虑可以组合哪些容器来获得相同的行为,但我无法想出任何可行的方法。
我在想我可以有一个 unordered_set 或 unordered_map 允许快速检索每个点的到目前为止的距离。对于 unordered_set,我可以定义一个 gridNode 对象,其中包含该点的位置和到目前为止的距离。
然后,我可以有一个向量,我可以对其进行排序并用于找到最短距离。
我只是不确定如何使这两个容器保持一致。向量是否包含指向 unordered_set 中条目的指针?向量是否可以包含网格点的坐标,我可以编写 std::sort 以便它使用 unordered_map 正确排序?
对此的任何想法将不胜感激。
【问题讨论】:
-
stackoverflow.com/questions/5493474/graph-implementation-c 概述了用于在 C++ 中存储图形的数据结构。任何规则网格都很容易生成。
标签: c++ hashmap set containers dijkstra