Один из способов быстро посчитать количество островов в 2D-сетке — использовать структуру Disjoint Set Union (DSU). www.geeksforgeeks.org Она эффективно объединяет связанные компоненты и помогает быстро определить, принадлежат ли две клетки одному острову. www.geeksforgeeks.org
Также для решения задачи можно применять Depth-First Search (DFS) или Breadth-First Search (BFS). www.finalroundai.com webrewrite.com
DFS работает так: www.finalroundai.com
- Пройтись по всем клеткам сетки. www.finalroundai.com
- Когда будет найдена незасещённая клетка с землёй (обозначается «1»), увеличить счётчик островов. www.finalroundai.com
- С помощью DFS посетить все связанные клетки с землёй и пометить их как посещённые (изменить «1» на «0»). www.finalroundai.com
- Продолжать до тех пор, пока не будет проверена каждая клетка. www.finalroundai.com
BFS работает так: www.finalroundai.com
- Пройтись по всем клеткам сетки. www.finalroundai.com
- Когда будет найдена незасещённая клетка с землёй («1»), увеличить счётчик островов. www.finalroundai.com
- С помощью BFS с помощью очереди посетить все связанные клетки с землёй и пометить их как посещённые. www.finalroundai.com
- Продолжать до тех пор, пока не будет проверена каждая клетка. www.finalroundai.com
Сложность времени выполнения этих подходов — O(M × N), где M — количество строк, N — количество столбцов. www.finalroundai.com