我在此链接中显示了适用于移动应用的棋盘游戏:http://i45.tinypic.com/23u8u1h.png
起点可以是任何细胞。获胜者是连接他/她的垂直(绿色玩家)或水平(红色玩家)的人。
节点是彩色单元格。白细胞可以算是体重吗?我不确定如何实现它,但是当我想到Dijkstra算法时,我认为当电路板处于这种状态时,计算需要花费大量时间才能得到正确的答案:http://i50.tinypic.com/35ivofd.png(我必须在这四个绿色单元上应用算法)
我想要一个算法告诉我“http://i48.tinypic.com/28c2ijl.png”黑色,棕色,蓝色和紫色路径是合理时间内最短的路径。
提前致谢。
答案 0 :(得分:0)
我认为Dijkstra在这里工作得很好,特别是与用于连接彼此相邻的字段并填充除白色以外的颜色的Union Find algorithm相结合。导致白色字段的边缘成本为1,导致自己字段的边缘成本为0,导致敌方字段的边缘成本为无穷大(例如 mn )。然后,您不会在代表单个字段的节点上运行Dijkstra,而是在这些字段的联合上运行(非白色字段的集群)。
Dijkstra将在大约 O(mn log ^ 2(mn))中工作,其中 n 和 m 是电路板的尺寸,Union Find将在 O(log mn)时间内使用链接文章底部提到的简单优化。