在网格上查找相邻块

时间:2009-11-28 05:10:19

标签: algorithm

我有这样的网格:

  1234567
1 ACBDBAB
2 ABDBABC
3 ABADBAB
4 BABDAAB
5 BABCDBA
6 BDBABCB
7 ABBCBAB

给定某个坐标,例如(3:4),我想找到所有其他坐标 具有相同字母的块,其与原件至少具有一个共同侧 阻止和其中一个阻止(递归)。在我的例子中,我想要以下块:

  1234567
1 .......
2 .......
3 .......
4 ..B....
5 ..B....
6 ..B....
7 .BB....

我目前的想法是通过递增和向上和向下检查原始列 在我的例子中,递减行号直到字母不同 会给我一个行号(4,5,6,7)。然后,我增加了 列号和检查我以前的行号,在我的例子中,没有一个 原来的字母,所以我开始递减,我在列检查4,5,6和7 2,我只看到7个匹配,所以我继续第1列,然后检查第7行等等 上。

1 个答案:

答案 0 :(得分:2)

我相信您正在寻找flood fill algorithm

编辑:我考虑了你提出的算法,并意识到它为什么不起作用。问题是它只检测凸面区域。假设您有这样的网格:

BAB
BBB
BAB

你想用C代替所有的B.如果你从网格中心的B开始算法,你就会得到这个:

BAB
CCC
BAB