Я пытался оборачивать голову тем, почему алгоритм Дейкстры не работает на отрицательных взвешенных графиках, и я понимаю все примеры, у которых есть еще один узел, указывающий обратно на узел, который был полностью изучен. Но эти примеры делают мою голову;Я правильно думаю об этом отрицательном весе, используя график алгоритма Дейкстры?
Я был бы прав, считая, что; первый A
. A->B
будет 1
и A->C
будет 100
. Затем исследуется B
и устанавливает B->D
на 2
. Затем обрабатывается D, поскольку в настоящее время он имеет самый короткий путь к источнику (т. Е. В верхней части очереди приоритетов)?
Я был бы прав, говоря, что если B->D
был 100
, C
бы уже были изучены первые (с A->D
является 101
)?
Единственное, что люди не упоминали в каждом объяснении, заключалось в том, что узел был исследован/посещен, он больше не может быть обновлен, поскольку Dijkstra работает в очереди приоритетов. Мне просто трудно обернуть голову вокруг, почему D
посещают до C
в этом случае.
У вас все в порядке. Алгоритм работает только в том случае, если кратчайший путь к узлу известен, когда он удаляется из очереди, и это просто не обязательно верно, если какой-либо более поздний узел может иметь ссылку с отрицательной взвешенностью. –
Спасибо Мэтт. Почему бы вам не поместить это в качестве ответа, и я его помету. Правильно ли я в своем втором заявлении об изменении B-> C до 100? –
Я не думаю, что мой ответ добавляет большую ценность сайту, поэтому я оставлю место на случай, если кто-то захочет дать хорошее объяснение. Да, ваше второе утверждение верно. –