Я не знаю, Boost, но здесь - ответ С.О. на концептуальном уровне:
Вот мое предположение: пройтись по графику с помощью BFS. На каждом узле отметьте его «глубину» и добавьте ссылку на «родитель» (должен быть только один, даже если есть много циклов) Как только вы обнаружите, что ссылка от A до B создает цикл (потому что B уже окрашен), тогда:
1) Вернитесь назад от A к корню, сохраните ребра / вершины по пути.
2) Вернитесь назад от B обратно к корню, сохраните ребра / вершины по пути.
3) Добавить A, B, AB
4) «Сортировка» для восстановления правильного порядка. Попробуйте использовать LIFO (стек) для 1) и FIFO для 2)
Надеюсь, это поможет.