代表地图并在其上运行A *

时间:2015-02-08 17:02:53

标签: java algorithm gis dijkstra a-star

我的问题主要是关于地图表示,我希望你的意见。

有一组由一堆道路代表的地图以及它们之间的连接 - 让我们说道路A在一条边上连接到B,C,D但是只有从A到C和D的转弯。 让我们说我用图表来表示这一点,其中每条道路都是边缘,每条道路会议/结束都是一个顶点。

我想在这样的表示中运行A *或任何其他...但是...在图表中从一个节点移动到另一个节点我非常需要知道我来自哪里...我的意思是 - 从哪个方向。我可以移动的下一个顶点取决于我所拥有的开放转弯。

我可以保留我来自哪里,但我也希望这一点尽可能通用,而简单的图表解决方案并不能让我知道我从哪里来。

你能告诉我你怎么接近这个?

谢谢!

1 个答案:

答案 0 :(得分:2)

将每个节点表示为一组节点,每个节点对应一条路径。

所以,让我们有以下图表。

example graph

让我们使用以下规则:

  • 如果从A来到B,我们只能转向D
  • 如果从C来到B比我们只能去E
  • 如果从A来到C,我们可以去B和D
  • 如果从E来到C,我们只能去B

我们有以下等效图表,现在每个节点都标有原始名称和来路:

enter image description here

这是通用的方式,允许在这种情况下使用任何标准算法用于有向图。对于某些算法,您可能需要创建虚假源或初始和接收或目标节点来处理这些图形,它们可以表示为每个节点,在当前情况下,如果我们从这个鼻子开始,我们可能需要一个额外的节点来描述行为而不是来自其他一些,但通常只是原始结构表示为经典图形。

如果他们总是有相同的行为,我们也不需要拆分A,D或E.