在网格

时间:2015-07-30 20:51:46

标签: c++ hashmap set containers dijkstra

我正在尝试编写一个在网格上运行的算法。它类似于Dijkstra的算法,但略有不同。

网格中的每个点都已占用或空闲。我想检查距离起点不到一定距离的所有可到达点。

我假设我可以分别以1和sqrt(2)的成本并行到网格线或对角线。

最简单的方法是,如果我有一个按值排序的地图。通过这种方式,我可以将关键点设置为每个点的坐标,并将该值设置为到达该点的距离最远的计算距离。我只需弹出距离最小的条目,然后找到并更新邻居点的远距离。

这样的容器不存在,所以我一直在想我可以合并哪些容器以便给我相同的行为,但是我无法想出任何有用的东西。

我在想我可以有一个unordered_set或unordered_map,它允许快速检索每个点的远距离。对于unordered_set,我可以定义一个gridNode对象,它包含该点的位置和远距离。

然后,我可以有一个矢量,我会排序并用它来找到最短的距离。

我只是不确定如何保持这两个容器的一致性。向量是否包含指向unordered_set中条目的指针?向量是否包含网格点的坐标,我可以编写std :: sort,以便它使用unordered_map进行正确排序?

对此的任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

在处理Dijkstra和类似Dijkstra的算法时,priority queues是你的朋友。标准C ++提供了std::priority_queue的一个实现。您必须存储坐标和距离对,并定义一个仅比较对的值的自定义比较器。