我有一个“无限”的二维网格,我想检测封闭/完整的“结构”-任何形状的区域都被四面环绕。但是,我需要识别每个单独的封闭回路-包括更大的形状(如果有的话)。
在研究中,我发现了循环检测算法,但我没有看到将大电路与小电路分开的干净/有效的方法。
例如,给出以下两个“完整”的结构:
0 1 1 1 0
0 1 0 1 0
0 1 1 1 0
0 0 0 0 0
0 1 1 1 1 1
0 1 0 1 0 1
0 1 1 1 1 1
第一个例子是一个由8个“墙壁”包围的单个单元格。使用循环检测可以轻松检测到这一点。
第二个例子由两个示例一的副本组成,但它们共享一堵墙。我关心三个独立电路 - 左房间,右房间和整体结构。
多次运行循环算法可能有效,但我必须确保没有重新跟踪已经找到的形状。
我也看过洪水填充算法,但似乎假设您已经知道了有界区域内部的某个点。对于无限2D网格,如果它不在有效结构中,我需要一个大小限制来强制它放弃。
我只会在添加边界值时执行此“检查”。使用上面的示例,如果我将任何0更改为1,则可能创建一个新的循环,并运行该逻辑。我不关心识别不同的结构,并且始终会有一个起点坐标。
我一直在研究这里发布的解决方案,但它们都基于已经知道哪些节点连接到其他节点的假设。我已经玩过了识别每条“线”的逻辑,我可以从那里继续,但它感觉是冗余的。