Вам не нужно находить расстояние до ВСЕХ узлов от A. Вы просто выходите из цикла после помещения B в дерево кратчайшего пути.
Нет лучшего алгоритма с точки зрения производительности.Все алгоритмы, находящие кратчайший путь от конкретного узла, запускаются с O (n ^ 2) в худшем случае.
РЕДАКТИРОВАТЬ.Однако немного лучшей производительности можно достичь, если принять во внимание некоторые специфические особенности обработанного графа (например, соотношение количества вершин и ребер)
EDIT2.Относительно вашего примера графика.Вот шаги:
1. A добавлено к дереву кратчайшего пути (SPT)
2. Обновите его соседей, не входящих в SPT.dist (B) = 3
3. Выберите вершину с помощью min.dist.не в SPT.это B. добавьте B к SPT.
4. Обновите его соседей, не входящих в SPT.dist (C) = 6, dist (E) = 5, dist (F) = 4
5. Выберите вершину с помощью min.dist.не в SPT.это F. добавить F к SPT.
6. F не имеет соседей.
7. Выбрать вершину с помощью min.dist.не в SPT.это E. добавьте E к SPT.
8. Обновите его соседей, не входящих в SPT.dist (D) = 9
9. Выберите вершину с помощью min.dist.не в SPT.это C. добавьте C к SPT.
10. Обновите его соседей, не входящих в SPT.dist (D) = 7.
11. Выберите вершину с помощью min.dist.не в SPT.это D. добавить D к SPT.
Готово