максРазмер : целое
началоМаксВетви: узел
проц максВетвь(узел : Узел, началоВетви: Узел, текРазмер: целое)
в зависимости от степени узла «узел»
если 0:
если текРазмер > максРазмер
максРазмер = текРазмер
началоМаксВетви = началоВетви
если 1: максВетвь(единственныйCын, началоВетви, текРазмер + 1)
если 2+:
для всех сыновей
максВетвь(сын, сын, 1)
максВетвь(корень, корень, 1)
for(int i = 0;i < Edges[v].size();i ++){
if(dfs(Edges[v].get(i)))return true;
}
цикл (i : все вершины)
если матрица_смежности[v, i]
если dfs(i)
return true;
UNVISITED = 0;
PARTLY_VISITED = 1;
VISITED = 2;
Если подвижных мостов мало, можно каждую вершину размножить в 2b экземплярах (b — кол-во мостов). Тогда пойдёт даже не Дейкстра, а обычный поиск в ширину.
Если два моста «сцеплены» друг с другом и наводятся/разводятся одновременно, то в b они идут одной штукой.
А если мостов много и 2b — непозволительная трата, тогда интересно. Думаю, ничего, кроме эвристик, не поможет. Например, может случиться так, что кратчайший путь от включателя до всех мостов, которыми он управляет, посуху. Или мосты (в смысле управляемые) — это мосты (в смысле теории графов). Или что-нибудь ещё.