Pou连接游戏算法

时间:2013-12-17 17:09:15

标签: android algorithm graph discrete-mathematics

最近我在Android上玩了一个名为Pou的简单游戏,其中一个内部游戏就是连接场上游戏中的点。这是一个截图,以更好地解释这种情况。

enter image description here

在游戏开始时,您将获得n对点,并且必须连接相同颜色的点。在执行此操作时,您需要填充矩阵字段。

生成这样的字段不是问题,但我怎么能确定它是可解决的?

我的问题是如何生成一个有解决方案的字段? 这是一个图形问题吗?或某种连接问题?

当然,我总能制作出暴力解决方案,但我正在寻找更好的东西

1 个答案:

答案 0 :(得分:3)

实际上,您可以生成矩阵,以确保它是可解决的。

主要思想如下。假设您需要i个点对,矩阵为n by n

  1. i随机选择的单元格(起点)设置为头部,并为每个单元指定不同的颜色。
  2. 在每次颜色的每次迭代中,将其头部随机(左,右,上,下)移动到未着色的单元格中,并使用i颜色对其进行着色。 (如果没有合法的此类动作,则不再考虑这种颜色 - 这将是终点
  3. 当您完成并且没有未着色的单元格时,您为该板创建了合法的颜色。
  4. 如果有一些未着色的细胞 - 它可能非常具有挑战性,但肯定可以修改/扩展您获得的着色以填充具有某种颜色的区域 - 最简单的方法是将这些区域完全排除在矩阵之外: - )
  5. 其他一些非常松散的想法:

    • 通过为其分配两个额外的点,可以使包含2个以上未着色单元格的每个区域合法(或至少部分内容);
    • 您可以将初始n by n矩阵拆分成较小的矩形部分,并为每个部分分配一些点(与面积成比例)并使用上述方法 - 确保当您使用较少的未着色单元格时合并这些部分(另一方面,拼图会更容易)。

    <强>更新

    • 一旦仍然处于着色的阶段,如果下一步产生一个单独的单元格:选择一个不同的移动,如果不存在这样的移动,则停止该颜色的着色过程。
    • 如果您想要预定义的点数(或接近它的数字),不仅要检查单个隔离的单元格,还要检查整个隔离的区域。 [顺便说一句。注意通过扩展起点]
    • 来为隔离区域的候选者着色的可能性
    • 对于相对较小的n,您可以尝试使用上述方法,直到您点击全彩色(因此生成,检查是否合法,如果不是:再次生成)

    更新II

    如果你有时间,你可以尝试一次生成一次颜色,有一些停止的可能性,这取决于着色的长度/面积。所以基本上只需选择一个随机未着色的位置并执行上述方法。它应该更容易实现。