Я пытался реализовать Edmonds-Karp в C++ для максимального потока, и я написал ее немного по-другому:Почему необходимо учитывать задние края в максимальном потоке Edmonds-Karp?
- Вместо того, чтобы идти через все ребра в остаточном графе, я пошел только через край, которые присутствуют в исходном графе , используя список смежности.
- Я не обновлял обратные края при обновлении остаточного графика с минимальным потоком.
Интересно, когда я запускал свой код, он дал мне правильные результаты. Поэтому я пошел в Wikipedia's example, где он конкретно показал, как используется задний край. Когда я передал этот график моему коду, Я снова получил правильный ответ. Я также проверил итоговую матрицу потока , и он был идентичен Википедии.
Может кто-нибудь объяснить, почему мы должны добавлять и обновлять задние края и, может быть, привести пример, где они критически важны?
Here «s код, который я написал (обновлен, чтобы включить задний края):
Просто быть уверены, чтобы понять, хорошо, означает ли это, что когда вы берете дугу в обратном порядке, вы не обновляете значение потока на этой дуге? –
@DamienProt У меня была идея, что вместо повторения по остаточному графу я просматриваю только исходный список смежности. Поэтому я никогда не посещал ни одного заднего края, и я не видел никакого обновления. – prakharsingh95