Найдите общее количество фигур 'X'

Опубликовано: 26 Февраля, 2023

Дана сетка размером N * M, состоящая из O и X. Задача состоит в том, чтобы найти общее количество фигур 'X'.

Примечание : форма «X» состоит из одного или нескольких соседних крестиков (диагонали не включены).

Примеры :

Input: grid = {{X, O, X}, {O, X, O}, {X, X, X}}
Output: 3
Explanation: The grid is:
X O X   |   X O X   |  X O
O X O  |   O X O   |  O X O
X X X   |   X X X    |  X X X
So, X with bold color are adjacent to each other vertically for horizontally (diagonals not included). So, there are 3 different groups in the given grid.

Input: grid = {{X, X}, {X, X}}
Output: 1
Explanation: The grid is: 
X X
X X
So, X with bold color are adjacent to each other vertically for horizontally (diagonals not included). So, there is only 1 group in the given grid.

Подход : Чтобы решить проблему, следуйте следующей идее:

The idea is to apply dfs from every cell having ‘X’ and not visited, mark all its adjacent cells visites if their value is X and increase the answer by one.

Следуйте инструкциям, чтобы решить эту проблему:

  • Вместо использования дополнительного вектора vis размером n*m для отслеживания того, какая ячейка посещается, а какая нет, мы можем просто преобразовать посещенную ячейку, имеющую «X», в «O».
  • Инициализируйте переменную с помощью 0, она будет вести подсчет подключенных компонентов, имеющих только « X ».
  • Создайте функцию dfs (x, y), чтобы пометить весь подключенный компонент, имеющий только «X», как посещенный, преобразовав все «X» в «O».
  • Запустите 2 вложенных цикла для перебора всей сетки.
    • Проверьте, имеет ли текущая ячейка « X », затем запустите из нее dfs и преобразуйте все ячейки в ее подключенном компоненте как «O» и
    • Увеличьте переменную ans на 1.
  • Вернуть переменную ans в качестве ответа.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N * M), так как векторная сетка имеет N * M ячеек, и каждая ячейка посещается максимум один раз.
Вспомогательное пространство: O (1). Если рассматривать стек рекурсии, временная сложность составляет O (N * M)

Статьи по Теме:

  • Введение в матрицу или сетку - учебные пособия по структурам данных и алгоритмам
  • Поиск в глубину или DFS для графика