Вам не нужно отслеживать весь путь для каждой вершины, как вы предлагали.Чтобы получить s-v
сами пути, единственное, что вам нужно записать для каждой вершины v
, - это ребро, которое "открыло" ее.
Другими словами, когда вершина v
обнаруживаетсяПо алгоритму вы записываете ребро (u,v)
, на котором оно достигло значения, которое минимизировало расстояние от s
.
Теперь, предполагая, что у вас есть «открывающее» ребро для каждой вершины v
вНа графике путь от s
до v
можно вычислить следующим образом: если (u,v)
- это ребро («обнаружение»), сохраненное для v
, то кратчайший путь от s
до v
- этопуть от s
до u
(который может быть вычислен рекурсивно), за которым следует одно ребро (u,v)
.
Итак, чтобы построить кратчайший путь от s
до v
, вы начинаетев вершине v
, затем вы следуете за ребром, сохраненным для v
в обратном направлении, и продолжаете, пока не достигнете s
.