Добрый день, коллеги!

Прошу поделиться вашими светлыми мыслями по алгоритму поиска непересекающихся множеств!
Задачка состоит в определении момента появления "островков" в трехмерной матрице n*m*z. Островком считается множество элементов, имеющие соседей по горизонтали, вертикали или глубине. Изначально цельный островок произвольной формы начинает отсекаться по кусочкам, требуется определить момент, когда островков становится больше одного.

На изображении приведен пример одного острова(слева) и момент возникновения двух островов (справа) по удаления элементов посередине.

Мне на ум приходит алгоритм обхода матрицы в трех циклах, при встрече элемента острова проходим через соседей по всему острову тем самым выделяя его. В матрице дублере, например, его можно удалять, чтобы не мешал дальше.

Вопрос, можно ли быстрее?! Сижу и ломаю голову, как применить графы, так как нам известно состояние системы до разделения и мы заранее можем оставить дерево острова до момента деления.