У меня есть проблема CS, которая сформулирована так:
У меня есть лист бумаги с вырезанными ячейками, представленными символами (либо "." (вырезано), либо "#" (не вырезано)), мне нужно найти, сколько частей получится.
Пример:
##..#####.
.#.#.#....
###..##.#.
..##.....#
.###.#####
Ответ для примера выше: 5.
Из одного куска получится:
....
.##.
....
Образуются две части:
....
.#..
..#.
Здравый смысл подсказывает мне найти способ представить лист графом (каждый знак числа является вершиной, и две вершины связаны, если они имеют общую сторону). Однако мне непонятно, как это сделать. Я обнаружил, что существуют неявные графы (графы, определяемые функцией, которая возвращает всех соседей данной вершины). Такая функция тривиальна для реализации в случае.
Возникает вопрос: Как мне изменить алгоритм DFS, чтобы найти компоненты в графе такого типа?