模式匹配适用于不懂算法的人 - 在网格中查找相邻的X.

时间:2011-11-16 15:27:21

标签: php algorithm pattern-matching

我想知道对于我需要在提供的网格中找到相邻(水平,垂直,对角线)X的问题的最佳方法是什么。

我想知道递归方式是什么,以及非递归方式。我尝试了一种递归方法来检查每一列,然后迭代行 - 这使得X在一个方向上 - 我应该为其他方向编写单独的递归函数吗?

示例网格:

XXX0X 
0000X 
00X00 
XXXX0 
0000X
输出应该是:

  • (0,0),(1,0),(2,0)
  • (4,0),(4,1)
  • (2,2),(0,3),(1,3),(2,3)(3,3)

1 个答案:

答案 0 :(得分:2)

您可能需要查看Flood Fill算法。你可以在维基百科上找到它。

我认为你所描述的或多或少是它。你做的基本上是:

For a given position:
If it is of the desired color (in your case 'O'):
  mark it (say, re-color it to a color 'M'),
  recurse on all desirable directions (run the same algorithm
    on new positions, which are +/-1 away);
else
  do nothing.

在您的情况下,结果是标记为“M”的位置。如果要查找其他邻接,可以随时重置标记为“M”的邻接,并在不同的位置启动算法。

编辑:根据你的例子,你似乎在寻找相邻的'X'。 :)