将2D阵列分成由连续线限定的区域
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将2D阵列分成由连续线限定的区域相关的知识,希望对你有一定的参考价值。
我是大学一年级的初学爱好者程序员。最近,我一直沉迷于益智游戏“The Witness”,因为它的极简主义却令人难以置信的难题。作为一个激情项目,我试图重新创建游戏中的Puzzle元素供其他人欣赏。
游戏
This is How the Game Looks So Far
基本上,您有一条由用户控制的白色路径,您必须在网格中导航该路径,将网格分成由黑色和白色瓷砖组成的区域。每个区域必须只有白色或仅黑色瓷砖。我已经发布了一张目前为止该项目看起来如何的图片,并解决了这个问题。
问题
我不能为我的生活找出一个功能,将网格分割成图像所示的区域。 Path是路径中每个点的x和y坐标的一维数组。当它完成时,它应该在网格的右上角(cols,rows)。这假设左下角是(0,0)。
Path = [[x1,y1],[x2,y2],...,[cols,rows]]
每个Puzzle都有n行和n列,所以id就像一个函数getRegions(path,cols,rows),它接受路径,行和列,并输出一个像这样的数组
arrayWithRegions=
[[2,3,3,2],
[2,2,2,2],
[1,1,1,2],
[1,1,1,2]]
其中每个方块根据路径和外边界设置的边界标记为处于不同的区域。示例是阵列如何在提供的图像中查找拼图。 (无视黑白块,它们现在无关紧要)
我会感谢任何形式的帮助,甚至是朝着正确方向努力的方向。谢谢!
您可以使用路径线和字段边缘作为边框执行Flood fill algorithm。
选择任何未标记的单元格(例如 - 左下角的单元格),使用区域标记1开始填充填充,遍历所有可能的单元格。然后找到另一个未标记的单元格,开始填充区域标记2,依此类推。
FF算法的最简单的递归实现和未标记单元格的顺序搜索应该适用于您的小字段。
以上是关于将2D阵列分成由连续线限定的区域的主要内容,如果未能解决你的问题,请参考以下文章