algorithm - 在网格上查找相邻 block

标签 algorithm

我有一个这样的网格:

  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/

相关文章:

解决两个现实生活问题的算法

algorithm - 最小化差异绝对值之和

python - 在 python 中对相似词进行分组的最佳方法是什么?

c++ - OpenCV>>相机相对位姿估计

java - 从数组创建二叉树

java - 连接所有点的直线算法,没有对角线

algorithm - 动态规划 : Why Knuth's improvement to Optimal Binary Search Tree O(n^2)?

algorithm - 具有两个权重属性的图的 Dijkstra 算法的变体

python - 将表示字典中字符位置的数字转换为原始字符串

java - JAVA 字符数组中的特定元素排列?