我想知道对于我需要在提供的网格中找到相邻(水平,垂直,对角线)X的问题的最佳方法是什么。
我想知道递归方式是什么,以及非递归方式。我尝试了一种递归方法来检查每一列,然后迭代行 - 这使得X在一个方向上 - 我应该为其他方向编写单独的递归函数吗?
示例网格:
XXX0X 0000X 00X00 XXXX0 0000X输出应该是:
答案 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'。 :)