我有一个这样的网格:
1234567
1 ACBDBAB
2 ABDBABC
3 ABADBAB
4 BABDAAB
5 BABCDBA
6 BDBABCB
7 ABBCBAB
给定某个坐标,例如 (3:4),我想找到所有其他坐标 具有相同字母且至少与原件有一个共同面的方 block block 和其中一个 block (递归)。在我的示例中,我想要以下 block :
1234567
1 .......
2 .......
3 .......
4 ..B....
5 ..B....
6 ..B....
7 .BB....
我目前的想法是上下检查原始列,通过递增和 递减行号直到字母不同,在我的例子中这个 会给我行号(4、5、6、7)。然后,我增加 列号并检查我以前的行号,在我的示例中,它们都不是 原始字母,所以我开始递减,我在列中检查 4、5、6 和 7 2,我只看到 7 个匹配项,所以我继续第 1 列并检查第 7 行等等 上。
最佳答案
我相信您正在寻找 flood fill algorithm .
编辑: 我对您提出的算法进行了一些思考,并意识到它为什么行不通。问题是它只检测凸区域。假设您有这样的网格:
BAB
BBB
BAB
并且您想用 C 替换所有 B。如果你从网格中心的 B 开始你的算法,你会得到这个:
BAB
CCC
BAB
关于algorithm - 在网格上查找相邻 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811644/