63번 줄처럼 종결조건을 주게 되면, 소스에서 싱크로 가는 경로로 찾은 것이 최단경로가 아닐 수 있습니다. 그러면 다음과 같은 경우에 음수 사이클이 생길 수 있습니다.
- 소스를 s, 싱크를 t라 합시다. u, v는 중간의 어떤 정점입니다.
- s ~> u ~> t의 cost는 5입니다.
- s ~> v ~> t의 cost는 3입니다.
- 그런데, s ~> u ~> t가 먼저 발견되었다고 합시다. 그러면 더 좋은 경로인 s ~> v ~> t는 발견되지 않습니다.
- flow augmentation을 하면서, s ~> v ~> t ~> u ~> s의 음수 사이클이 생깁니다. (3-5 = -2)
음수 사이클이 뭐가 문제인가 하면, 바로 다음 iteration에 SPFA를 시행할 때, 무한 루프에 빠지게 되어 문제입니다. 이 상황은 애초에 최적의 비용을 갖는 경로를 택하지 않은 잘못에서 기인하며, 사후적으로 되돌릴 수 없습니다. 음수 사이클이 생긴 이상 s -> t로 가는 최단경로라는 것이 존재하지 않기 때문이죠.
MCMF는 반드시 매회 최적의 flow augmentation 경로를 찾아야 제대로 돌아갑니다.
playsworld16 3년 전
전형적인 MCMF 문제인데
어디선가 무한 루프라도 걸리는 걸까요?