【问题标题】:recommended shortest path algorithm from edge to edge推荐的从边缘到边缘的最短路径算法
【发布时间】:2012-10-06 10:01:36
【问题描述】:

我有一个移动应用程序的棋盘游戏,在此链接中显示:http://i45.tinypic.com/23u8u1h.png

起点可以是任何单元格。获胜者是垂直(绿色玩家)或水平(红色玩家)连接他/她的人。

节点是彩色单元格。白细胞可以被认为是重量吗?我不知道如何实现它,但是当我想到 Dijkstra 算法时,我相信当板子处于这种状态时,它需要花费很多时间来计算直到它得到正确的答案:http://i50.tinypic.com/35ivofd.png(我有将算法应用于这四个绿色单元格)

我想要一种算法,它告诉我“http://i48.tinypic.com/28c2ijl.png”黑色、棕色、蓝色和紫色路径是合理时间内最短的路径。

提前致谢。

【问题讨论】:

  • 我认为您低估了计算机的速度。 Dijkstra 将非常快地解决这个问题,用那么小的板子。您也可以查看 A*,但 (尽管它非常简单) 对于这么小的搜索空间来说,这可能是矫枉过正。

标签: algorithm graph graph-algorithm


【解决方案1】:

我认为 Dijkstra 在这里工作得很好,尤其是与 Union Find algorithm 结合使用,用于连接彼此相邻的字段并填充白色以外的颜色。通向白色区域的边花费 1,通向自己区域的边花费 0,通向敌方区域的边花费无穷大(例如 mn)。然后,您不会在代表单个字段的节点上运行 Dijkstra,而是在这些字段的联合(非白色字段的集群)上运行。

Dijkstra 的工作时间约为 O(mn log^2(mn)),其中 nm 是电路板的尺寸,并且联合查找将在 O(log mn) 时间内通过简单的优化工作,如链接文章底部所述。

【讨论】:

  • 感谢@Zaroth,通过搜索Union Find algorithm,我发现我的游戏类似于Game of Hex。我对算法仍然不是 100% 没问题,但如果 Dijkstra 可以工作,我会去的。我唯一的问题是,有时我会从一个节点到另一个节点获得多条路径。我的问题中发布的第三个链接显示单元格 3 有两条通往单元格 1 的路径。在这种情况下我应该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
相关资源
最近更新 更多