在群中查找所有相似的邻居 - 需要递归功能

时间:2014-06-04 15:37:49

标签: vb.net functional-programming selection neighbours

我有一个问题,我确信可能已经有很多有效的解决方案。为了简化,我们假设两种类型的单元的网格宽度单元格," X"细胞和" o"细胞。

 5 +-+-+-+-+-+-+-+-+-+-+-+
   |X|X|o|X|X|o|o|o|o|o|X
 4 +-+-+-+-+-+-+-+-+-+-+-+
   |o|X|o|o|X|o|o|o|o|o|X
 3 +-+-+-+-+-+-+-+-+-+-+-+
   |o|X|X|X|X|o|o|X|o|o|X
 2 +-+-+-+-+-+-+-+-+-+-+-+
   |X|o|o|X|X|X|X|X|X|o|X
 1 +-+-+-+-+-+-+-+-+-+-+-+
   |X|X|o|o|X|X|X|o|o|o|X 
   +-+-+-+-+-+-+-+-+-+-+-+
 0   1 2 3 4 5 6 7 8

现在其中一个" X"正在选择细胞。

   +-+-+-+-+-+-+-+-+-+-+-+
   |X|X|o|X|X|o|o|o|o|o|X
   +-+-+-+-+-+-+-+-+-+-+-+
   |o|X|o|o|X|o|o|o|o|o|X
   +-+-+-+-\-/-+-+-+-+-+-+
   |o|X|X|X<*>o|o|X|o|o|X
   +-+-+-+-/-\-+-+-+-+-+-+
   |X|o|o|X|X|X|X|X|X|o|X
   +-+-+-+-+-+-+-+-+-+-+-+
   |X|X|o|o|X|X|X|o|o|o|X 
   +-+-+-+-+-+-+-+-+-+-+-+

我需要知道的是所有相邻的&#34; X&#34; &#34; X&#34;所选单元格所在的覆盖区域。 &#34; X&#34;没有直接连接并被&#34; o&#34;该组的细胞被排除在外。见下图。

   +.+.+-+.+.+-+-+-+-+-+-+
   :   :o:   :o|o|o|o|o|X
   +.+ +-+.+ +-+-+-+-+-+-+
   |o: :o|o: :o|o|o|o|o|X
   +-+ +.+.+ +-+-+.+-+-+-+
   |o:       :o|o: :o|o|X
   +-+.+.     .+.+ +.+-+-+
   |X|o|o:           |o|X
   +-+-+-+.+     +.+.+-+-+
   |X|X|o|o:     :o|o|o|X 
   +-+-+-+-+.+.+.+-+-+-+-+

基本上它是一个简单的&#34;填充&#34;功能,我需要找到该区域的边界来填补。 我确信这种事情甚至还有一个特定的名称。告诉我,也将不胜感激:))

1 个答案:

答案 0 :(得分:1)

您之后的算法名称是Flood Fill。我有一个用于F#的简短代码示例(Pacman clone)。