Вот высокоуровневая разбивка алгоритма Дейкстры:
Вы помещаете все вершины в приоритетную очередь, где все вершины имеют приоритет (расстояние) бесконечности , кроме дляисходная вершина с нулевым расстоянием (исходная вершина равна нулю на расстоянии от себя, не так ли?).
Выдвиньте приоритетную очередь.Удаленная вершина является вершиной с кратчайшим расстоянием от источника.Очевидно, что первая вершина, выдвинутая из очереди, является источником.Хорошо, назовите эту вытянутую вершину v .
Посмотрите на каждого из соседей v .Все они будут иметь расстояние, превышающее расстояние v (в противном случае мы бы уже вытолкнули их из очереди, верно?).Допустим, v имеет расстояние 3, а v имеет 3 соседей x (dist-from-source: 5), y (dist-from-source: 10) и z (dist-from-source: infinity).
Теперь мы рассмотрим расстояние до каждого соседа от v .Допустим, они: x - 3, y - 2, z - 4. Это означает, что путь от источника до x который проходит через v имеет расстояние | v |+ 3 (3 + 3 = 6), y имеет расстояние 5 (3 + 2 = 5), а z имеет расстояние 7 (3 + 4 = 7).
Путь к x через v длиннее, чем текущий кратчайший путь к x , поэтому мы его игнорируем.Однако пути к y и z , которые проходят через v , короче, чем предыдущий известный кратчайший путь, поэтому мы обновляем их.
Вы сохраняетеделать это, пока не пройдете все вершины.В каждой точке, когда вы извлекаете мин из очереди с приоритетами, вы знаете, что нашли кратчайший путь к этой вершине, потому что любой возможный более короткий путь должен проходить через вершину с расстоянием менее v , чтоозначает, что мы бы уже вытолкнули это из очереди.