在网格中查找孤立的块组

时间:2013-07-03 12:11:03

标签: algorithm language-agnostic

我有一个“块”网格(以2D数组的形式,可以是5 * 5,17 * 17或其他),我可以随意添加或删除块,对于那个应该永远留在那里的人来说。

我可以放置块,如果他们有本地邻居:在他们的右/左/上/下(至少其中一个)。

通过删除一些块,它可能会使其他块隔离而没有与中心块“连接”,我想避免这种情况。

我正在寻找一个快速的解决方案来检查我的所有块是否都与中心有连接,最简单(在编码方面,我可以接受有一个非最佳解决方案,因为这应该是执行的非常小的数据,而不是经常)。我想到的第一件事就是将其作为路径搜索来实现,但这似乎有些过分。

我正在使用C ++,但这不应该有任何区别。

1 个答案:

答案 0 :(得分:1)

您需要使用DFS / BFS找到连接的组件。构建初始图形,添加新块时,可以添加新边,或者删除块时可以删除边。当删除块时,请暂时删除图中的那些边缘并检查它是否导致两个图形断开连接。这很简单,再次执行DFS。如果没有断开连接,则可以删除该块。

DFS只需要大约8行来实现,对于小数据集来说,这很优雅。