Вы можете сделать это в O (N log (M)) , где N - количество позиций на доске, а M - количествоДоступные фигуры:
- O (N log (M)) : Для каждой точки ( O (N) ) обновите карту доступных фигурдля его строки и столбца ( O (log (M) ).
- O (N log (M)) : Для каждой точки ( O (N) ) проверьте наличие похожих фигур рядом или на расстоянии одного вертикального или горизонтального расстояния.или по диагонали ( O (1) ) и проверьте карту (ы) строк / столбцов ( O (log (M)) ), которые "соединят три", чтобы увидеть,допустимый ход доступен.
Вы также можете улучшить вышеуказанный метод, чтобы он не повторял ненужные проверки (фигуры во 2-м ряду и ниже не проверяются, а фигуры во 2-м столбце)и справа не проверяйте левый), но большая стоимость O будет такой же.
Кроме того, после каждого перемещения вам нужно только обновить карты строк / столбцов, которые изменились, и вам нужно только проверить формы, которые изменились.В худшем случае очищается вся плата, поэтому большая стоимость O будет такой же.