Алгоритм зависит от ситуации и от организации графа.
Если нам надо выяснить наличие электричества с нуля для уже построенной сети:
- Все работающие электростанции считаются - имеют электричество.
- Перебираем линии, подключённые к работающим электростанциям; их надо собирать в отдельную очередь. Каждый дом на конце линии, который ещё не в списке - заносим в список имеющих электричество.
- При добавлении каждого дома - в очередь заносятся линии, подключённые к этим домам.
- Когда очередь стала пустой - список построен окончательно.
Если Вам надо добавить линию - то смотрим, есть ли на одном конце этой линии дом с электричеством, а на другом конце - дом без электричества. Если в дом1 имел электричество, а дом2 не имел - то применяем вышеизложенный алгоритм, но уже от дома2, где оно появилось. Ну и обратную проверку тоже надо сделать.
Если включается электростанция - то запускаем поиск от неё.
А вот если рвётся линия или отключается электростанция - то придётся строить список с нуля.
PS: Есть алгоритмы динамической маршрутизации пакетов в сетях передачи данных (в т.ч. в Internet). Они умеют чётко обрабатывать добавление и удаление узлов и связей между узлами. Но они хранят намного больше информации - т.е. такие алгоритмы требуют больше памяти.
Ну и надо добавить, что эти алгоритмы предназначены для распределённого выполнения на узлах, причём связь между узлами может отсутствовать.