Почему в псевдокоде DIJKSTRA в главе 24 стр. 658 CLRS Third Edition во внутреннем цикле при ослаблении смежных ребер из новой добавленной вершины разрешено ослабление ребер, уже извлеченных из очереди и добавленных в кратчайший путь к дереву?
while(Q not empty){
u = extractMin from Q;
Add S to the shortest path tree;
for each vertex v adjacent to u
relax(u,v,w)
}
Почему внутренний цикл не проверяет, является ли вершина уже частью дерева кратчайшего пути, например,
while(Q not empty){
u = extractMin from Q;
Add S to the shortest path tree;
for each vertex v adjacent to u
if v is in Q
then relax(u,v,w)
}
Какой правильный подход?