Алгоритм Дейкстры — один из самых быстрых алгоритмов решения задачи о кратчайшем пути. В моем случае сеть состоит из узлов, где вес преимущества — это прибыль, которую я получаю. Мне было интересно, смогу ли я обратить алгоритм Дейкстры, чтобы решить эту проблему, но я понял, что если мы будем работать в замкнутом цикле (потому что стоимость будет расти все больше и больше, это будет продолжаться вечно). Я знаю, как решить ее как задачу целочисленного программирования, поэтому я могу проверить правильность алгоритма (и, к сожалению, не правильно). Вот псевдокод для Dijkstra, который я использовал. Какая правильная модификация должна быть сделана?
ln=∞ for all n∈N∖{s}, ls=0
N′={s}, N′′=∅
repeat
n=argminn′∈N′ln′ N′=N′∖{n}, N′′=N′′∪{n}
for all (n,m)∈A with m∈N∖N′′ do
if lm>ln+cn,m then
lm=ln+cn,m N′=N′∪{m}
end if
end for until (N′=∅ or t∈N′′)