Ответ 1
dijkstra предполагает, что стоимость дорожек монотонно возрастает. что плюс упорядоченный поиск (с использованием очереди приоритетов) означает, что, когда вы впервые достигнете node, вы пришли через кратчайший путь.
это неверно с отрицательными весами. если вы используете dijkstra с отрицательными весами, то вы можете найти более поздний путь лучше предыдущего (потому что отрицательный вес улучшил путь на более позднем этапе).
поэтому в bellman-ford, когда вы придете к node, вы проверите, будет ли новый путь короче. в отличие от dijkstra, вы можете отбирать узлы
в некоторых (большинстве) случаях dijkstra не будет исследовать все полные пути. например, если G привязана только к C, то любой путь через G будет более дорогостоящим, чем любой через C. bellman-ford все равно будет рассматривать все пути через G к F (dijkstra никогда не будет смотреть на них, потому что они имеют более высокую стоимость, проходя через С). если он этого не делает, он не может гарантировать обнаружение отрицательных циклов.
вот пример: приведенное выше никогда не вычисляет путь AGEF. E уже отмечен как посещение к моменту поступления из G.