хорошо, так что это очень далеко от изящного, но достаточно хорошее решение, которое я нашел, вместо того, чтобы модифицировать сам алгоритм (который для меня все еще напоминает Эверест, хотя я провел всю ночь, изучая код подробно!):
1) запустить алгоритм несколько раз с одними и теми же переменными, за исключением:
2) каждый раз, когда список графиков поворачивается на один шаг
[[a, b, 1],[b, c, 1],[c, a, 1]]
[[b, c, 1],[c, a, 1],[a, b, 1]]
[[c, a, 1],[a, b, 1],[b, c, 1]]
... и т. Д. для больших графиков
3) то же самое, но также и с обратным графиком
[[c, a, 1],[b, c, 1],[a, b, 1]]
[[b, c, 1],[a, b, 1],[c, a, 1]]
[[a, b, 1],[c, a, 1],[b, c, 1]]
... то же самое
4) сбор всех этих решений, затем удаление дубликатов.
Похоже, это работает, потому что Дейкстра шаг за шагом просматривает список графиков, чтобы построить свое решение, поэтому, я думаю, первым пришел, первым обслужен ...
Таким образом, я получаю все кратчайшие путиЯ хочу, за исключением одного случая: когда веса не равны в «эквивалентных сегментах» между двумя узлами - под эквивалентом я подразумеваю одинаковое количество узлов между ними.
Это заставляет меня оценивать код на обоихвзвешенный график и невзвешенная копия, когда мне просто нужны все возможные пути между некоторыми сильно связанными узлами, но это вполне поддается управлению для того, что мне нужно, учитывая скромный размер моих графиков ...
Спасибо всем за ваши предложения! Бест,
Жюльен