找到板上最长的序列?

时间:2013-11-20 19:32:18

标签: algorithm artificial-intelligence computer-science

我需要一个执行以下操作的功能:

作为输入,它需要一个n×n的板,每个点都是空的,有黑色的石头或白色的石头,以及一个位置。

作为输出,它返回给定位置的最长序列的长度。如果该位置为空,则返回0.

例如,如果输入了该板。

BUUUU
WWWB
UUUUU

其中B是黑色石头,W是白色石头,U是空白点,输入的位置是(1,0),输出为3。

或者如果输入了这个板子:

BUUU
WUUU
BUUU
BUUU

且位置为0,3输出为零,因为该位置为空。如果位置为3,0,由于黑色列,输出将为2。

序列可以是水平,垂直或对角线。

这是我到目前为止所做的:

如果我有位置,我会上下,两侧和两条对角线。我一直在砍,直到我发现序列中断,然后返回最长的序列。例如,如果这是董事会:

WUU
WWU
WUU

并且该职位是1,0。我会侧身循环,发现最长的水平序列是1,对角循环,找到最长的序列是1然后垂直循环,找到最长的序列是3,因此返回3.

我怎样才能更快地完成这项工作?这个功能需要在一秒钟内调用大约1000万次。我目前的功能每秒可以执行大约800万次。

1 个答案:

答案 0 :(得分:0)

这是O(n ^ 2)操作。以行主顺序迭代董事会。对于电路板上的每个位置,使用每个方向(水平,垂直和对角线)保持最长连续序列的3元组计数。当遇到占用位置时,检查所有相邻位置是否有连续序列,并增加最大长度如果该位置应该是所述序列的有效补充。祝你好运。