我在想,如果我需要在提供的网格中找到相邻的(水平的、垂直的、对角线的)x,最好的方法是什么。
我想知道递归方式和非递归方式是什么。我尝试了一种递归方法来检查每一列,然后迭代行——这给了我一个方向的X——我应该为其他方向分别编写递归函数吗?
示例网格:
XXX倍
万倍
00x00个
三十三
万倍
输出应为:
(0,0),(1,0),(2,0)
(4,0),(4,1)
(2,2),(0,3),(1,3),(2,3)(3,3)

最佳答案

您可能想查看洪水填充算法你可以在维基百科上找到它。
我认为你所描述的或多或少是这样你所做的基本上是:

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”。)

关于php - 适用于不了解算法的人的模式匹配-在网格中查找相邻的X,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8154122/

10-10 00:55