Используя следующий подход, мы можем запустить алгоритм всего один раз:
set v_visisted = false
Start from w and find shortest path to u
if v was visited during shortest path search to u, set v_visted = true
If v is part of shortest path from w->u then
exit with result ( # the path would be u->v->w->v )
else
if v_visited= true then we already know values for w->v. We have a solution.
else save path from w->v and switch u to source and find shortest path to v.
Обратите внимание, что выполнение кратчайшего пути от u до v эффективно продолжает первый запуск алгоритма. Поэтому мы запускаем алгоритм только один раз, отслеживая, посетили ли мы 'v'.