给定网格上的一组图块,我想确定:
- 如果瓷砖是一个封闭的图形
- 如果将板的侧面算作图形的边缘时,这些瓷砖形成一个封闭的图形
- 如果前两个陈述中的任何一个为真,则附加图块中的其他图块将形成初始图块。
玩家将首先按下一个图块,然后将其手指拖动到其他图块以创建一串相同颜色的图块。我将检查下一个磁贴是否有效。例如 如果玩家在红瓦开始,他们唯一的下一个有效的行动是到邻近的红瓦(对角线做计数)。当用户抬起手指时,我需要能够检查上述3个项目。
所以我最初的想法是,由于我每次走时都要检查链条的有效性,所以当玩家抬起手指时,我可以检查第一个和最后一个瓷砖是否相邻。(我已经知道它们是相同的颜色。)如果它们相邻,我会预感会做出一个封闭的图形,然后我要来这里尝试看看我是否丢失了一些大东西,并得到某种逻辑/数学证明,我的直觉是正确的(或一个例子证明它是错误的。)
但是那时候我想到了项目2:我还必须考虑使用木板边缘作为封闭图形侧面的链条。在这种情况下,链中的第一个项目和最后一个项目不会相邻,但是我仍然会附上一个数字。所以现在我回到正题。
我应该如何处理这一系列的网格坐标,以确定它们是否包含封闭的图形?有一次我不知道我有一个封闭的身影,那是什么让那个属于其范围内的所有瓷砖的附加列表的最佳方式?
上面我画了我期望该测试有4种可能结果的图片。
链没有附上数字。
链确实有一个封闭的数字。
如果将板的侧面算作图形的边缘(或一个以上的边缘),则链条会形成一个封闭的图形。
该链的确制作了一个封闭的图形,但是有一些额外的数据点(用户已有效选择作为链的一部分),这些数据点不属于所创建图形的一部分。
情况4是最棘手的,因为您必须提取“额外”链节以找到封闭的图形和落入其中的零件(但不能围绕“未封闭”的区域)。
所以...有人想办法解决这个问题,还是对我来说只是一个起点?在这一点上,我有点转圈,可以使用另一组眼睛。