六边形网格最短路径加权切片

时间:2016-03-14 08:13:55

标签: matlab shortest-path a-star hexagonal-tiles

我不是贸易程序员(化学工程师),但我正在为一个孩子的科学奥运会做一些爱好代码。

基本上,有一个Catan(六角形)板,带有不同的瓷砖(8种类型),带有起始瓷砖和最终瓷砖。移动没有成本,但是移动通过瓦片会导致瓦片的成本(例如:移动到瓦片A将导致成本为2)。你可以通过六边形的六个方向移动(你不像Catan那样骑过边缘)。

游戏的目标是在最后获得最低分数。

我研究过的内容

到目前为止,我尝试使用matlab和dijkstra编写最短路径算法。但是,我发现我必须做很多工作,因为有250个节点,每个节点需要6个加权线。我不知道如何将这些节点放在一个空间中,并且基本上说,“好吧,你值得X量,可以前往任何相邻的空间”而无需手动编码每一行。

FWIW我正在使用matlab并且正在尝试调整this code但是我正在努力为E3和V填充表格,不那么V但是大多数情况下很容易说“好吧,这里的瓷砖是值得X。“

提前致谢,

1 个答案:

答案 0 :(得分:1)

在您的情况下,您有与节点关联的成本,而不是边缘。有两种方法可以解决问题,修改代码或修改问题。由于编程经验不多,我会选择以后的选项。将节点成本问题更改为边缘成本问题,该问题返回相同的结果。为了说明这一点:

enter image description here

  1. 在每条边上插入一个额外的节点。现在为连接到节点的每个边缘分配一半的成本权重
  2. 对于开始和结束节点,您需要一个额外的节点。否则你将减少一半的费用。
  3. 现在你有了一个更大的图表。此问题的任何解决方案也是您原始问题的解决方案。在下一步中,您可以简化它。您可以删除在原始节点之间插入的任何节点,并为其分配总和权重。只有开头/结尾的其他节点必须保留在图表中。