Как перебрать для всех вершин все пути до других вершин

У меня есть ориентированный граф введите сюда описание изображения

Мне нужно сделать вот такой перебор:
Берём вершину 2. Перебираем все пути от вершины 2 до вершины 3 (один путь: 2->3). Далее перебираем все вершины от 2 до 4 (два пути: 2->3->4, 2->4). Далее от 2 до 5 и до самой последней (здесь до 5)

В общем, для каждой вершины перебрать все пути до других вершин.
Два вопроса:

Как сделать этот перебор в графе представленном матрицей смежности, можно код на Python
Возможно ли это оптимизировать, потому что перебирать столько путей будет очень медленно


Ответы (1 шт):

Автор решения: MBo

Используйте доработанный поиск в ширину (или в глубину)

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

Это можно осуществить, передавая новый экземпляр пометок (visited) в рекурсивный вызов, либо работать с одним экземпляром, но очищать пометку обрабатываемой вершины после рекурсивного вызова.

→ Ссылка