我有这样的网格:
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行等等 上。
答案 0 :(得分:2)
我相信您正在寻找flood fill algorithm。
编辑:我考虑了你提出的算法,并意识到它为什么不起作用。问题是它只检测凸面区域。假设您有这样的网格:
BAB
BBB
BAB
你想用C代替所有的B.如果你从网格中心的B开始算法,你就会得到这个:
BAB
CCC
BAB