Android-Pou Connect游戏算法
作者:互联网
最近,我在Android上玩了一个名为Pou的简单游戏,其中一个内部游戏是野外游戏中的点点滴滴.这是一个截图,可以更好地说明情况.
在游戏开始时,您会得到n对点,并且必须连接相同颜色的点.在执行此操作时,您需要填充矩阵字段.
生成这样的字段不是问题,但是如何确定它可以解决?
我的问题是如何生成具有解决方案的字段?
这是图形问题吗?还是某种连通性问题?
当然,我总是可以提供一种蛮力的解决方案,但是我正在寻找更好的东西
解决方法:
实际上,您可以以确定矩阵可解的方式生成矩阵.
主要思想如下.假设您需要i对点,矩阵为n×n
>将i个随机选择的单元格(起点)设置为头部,并为每个单元格分配不同的颜色.
>在每种颜色的每次迭代中,将其头随机(左,右,上,下)移动到未着色的单元格中,并用第i种颜色进行着色. (如果没有合法的举动,就不要再考虑这种颜色了,这将是终点)
>完成后,没有未着色的单元格,则为电路板创建了合法的着色.
>如果存在一些未着色的单元格-这可能是一个很大的挑战,但可以肯定地修改/扩展您获得的颜色以用某种颜色填充这些区域-最简单的方法是将这些区域完全从矩阵中排除:- )
其他一些非常宽松的想法:
>通过给每个区域分配两个额外的点,可以使每个区域(包括至少两个无色单元格)合法(或至少其中一部分);
>您可以将最初的n×n矩阵拆分为较小的矩形部分,并为每个部分分配一些点数(与该区域成比例),然后使用上述方法-确保将这些部分合并回原本时,未着色的单元格更少(另一方面,难题会容易一些).
更新
>一旦仍然处于着色阶段,如果下一个动作产生单个孤立的单元格:请选择一个不同的动作,如果不存在这样的动作,则停止对该颜色的着色过程.
>如果要具有预定义数量的点(或其附近的数字),则不仅要检查单个隔离的单元格,还要检查整个隔离的区域. [顺便说一句.介意通过扩展其起始点为隔离区域着色的可能性]
>对于相对较小的n,您可以尝试使用上述方法,直到完全着色为止(因此生成,请检查是否合法,如果不合法:请再次生成)
更新二
如果您有时间,可以尝试一次生成一种颜色,并且有一定的停止可能性,这取决于颜色的长度/面积.因此,基本上只需选择一个随机的无色位置并执行上述方法即可.它应该更容易实现.
标签:discrete-mathematics,graph,algorithm,android 来源: https://codeday.me/bug/20191122/2059078.html