Задание: Поиск шарниров в графе.
Поиск шарниров в графе осуществляется с помощью модифицированного алгоритма поиска в глубину. Метод recursiveGetAp осуществляет рекурсивный "спуск" по графу из вершины ptr_.
"Спуск" осуществляется по следующему алгоритму:
- текущая (T) вершина помечается.
Dnum(в коде этоdepth) иlowэтой вершины присваевается текущая глубина.- Для каждой присоединенной (P) к текущей и не посещенной вершине выполняется:
- 3.1 количество потомков T +
1 - 3.2 предок P := T
- 3.3 переход на пункт 1 для P (рекурсивный вызов функции "спуска" для P)
- 3.4
low[T] = min(low[T], low[P])\ - 3.5 Если у T нет предка, но есть потомки: T - шарнир
- 3.6 Если у T есть предок и
low[P] >= Dnum[T], то T это шарнир.
- 3.1 количество потомков T +
- Если P посещена и P не предок T, то необходимо пересчитать
low[T] := min(low[T], low[P]).
Результатом выполнения метода recursiveGetAp будет массив result содержащий все шарниры графа и массив groups содержащий все компоненты связности.
В качестве примера в директории samples содержится файл apgraph.in в котором содержится следующий граф:
Граф записан в виде матрицы смежности, которая выглядит следующим образом:
12
0 1 0 0 1 0 0 0 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 1 0 0 0 0 1
0 0 0 0 1 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 1 0 0 1 1 0 0 0 0
Найти шарниры в графе:
./graphsalg -f graph.in -aНайти шарниры в графе и записать "раскрашенный" граф в .json файл
./graphsalg -f graph.in -a -o graph.json -jНайти шарниры в графе, удалить их и записать получившийся граф в .json файл
./graphsalg -f graph.in -a -d -o graph.json -jВвести граф с клавиатуры (как матрицу смежности) и найти шарниры в графе
./graphsalg -aВвести граф с клавиатуры (как матрицу смежности), найти шарниры в графе, и записать получившийся граф в файл
./graphsalg -a -o graph.json -jВвести граф с клавиатуры (как матрицу смежности), найти шарниры в графе, удалить шарниры и записать получившийся граф в файл
./graphsalg -a -d -o graph.json -j