Я не очень уверен, что алгоритм Дейкстры можно легко адаптировать для этого; Конечно, это не так просто, как удалить посещенные ребра, потому что n кратчайших может поделиться некоторыми из них.
Итак, почти грубое, но эвристически ориентированное решение - попробовать это:
- для каждого ребра E в кратчайшем пути:
- удалите E и снова запустите модифицированную Дейкстру над новым графиком
- если кратчайший путь длиннее первого полученного, остановите
- иначе, повторите рекурсивное удаление по одному ребру за раз из нового подграфа
Моя интуиция подсказывает мне, что она должна работать с увеличением сложности, пропорциональным длине (n
числа ребер) первого решения ... Если больше нет кратчайшего пути, оно должно заканчиваться на первый раунд, если он находит другой, он продолжается с n-1
попытками. Оценка увеличения сложности в наихудшем случае по сравнению с исходным алгоритмом очень плохая (n!
Я полагаю?), Но это также означает, что существует множество путей, поэтому эту работу необходимо выполнить с любым алгоритмом ...
edit: Если подумать немного больше, увеличение сложности может быть даже больше, чем факториал числа узлов первого найденного пути, поскольку у второго может быть даже больше узлов! Поэтому я думаю, что очень сложно оценить сложность этого метода, но это должно быть что-то вроде числа допустимых решений, умноженного на среднее число узлов в путях, умноженное на число узлов в квадрате (это последний член исходная сложность неизмененного алгоритма).
edit 2: Я нашел исследовательскую работу по этому вопросу, для получения полного текста требуется подписка, но, возможно, вы найдете ее где-нибудь еще: http://ieeexplore.ieee.org/Xplore/login.jsp?reload=true&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F7719%2F21161%2F00982778.pdf%3Farnumber%3D982778&authDecision=-201