최소 비용 최대 유량 계산기
용량과 단위 비용이 붙은 네트워크에서 최대 유량을 가장 싸게 흘리는 방법을 찾습니다. 증가 경로를 단계별로 보이고, 흐름 보존·용량·비용 합을 결과에서 함께 검산합니다.
한 줄에 «출발 도착 용량 단위비용» 하나씩. 방향이 있는 그래프이고 정점 20개, 간선 60개까지 다룹니다.
s → t 최소 비용
16원
최대 유량 4단위를 흘리는 방법 중 가장 싼 값입니다. 단위당 평균 4원이 들었습니다.
증가 경로 — 싼 길부터 차례로 흘린다
| # | 경로 | 단위비용 | 흘린 양 | 누적 비용 |
|---|---|---|---|---|
| 1 | s → a → t | 2원 | 2 | 4원 |
| 2 | s → b → t | 6원 | 2 | 16원 |
단위비용은 줄어들지 않습니다. 싼 길이 먼저 꽉 차고 남은 길이 비싸지기 때문인데, 이 성질이 「매번 가장 싼 길로 늘리면 결국 전체가 최적이 된다」는 근거입니다.
간선별 유량
| 간선 | 유량 / 용량 | 단위비용 | 비용 |
|---|---|---|---|
| s → a | 2 / 2 | 1원 | 2원 |
| s → b | 2 / 2 | 5원 | 10원 |
| a → t | 2 / 2 | 1원 | 2원 |
| b → t | 2 / 2 | 1원 | 2원 |
결과를 매번 검산합니다 — 출발점·도착점을 뺀 모든 정점에서 유입 = 유출인지, 어느 간선도 용량을 넘지 않았는지, 간선별 비용의 합이 총비용과 맞는지. 지금 결과는 셋 다 통과했습니다.
계산 방법
- 1한 줄에 «출발 도착 용량 단위비용»으로 간선을 적습니다.
- 2출발점과 도착점을 고릅니다.
- 3증가 경로 표에서 싼 길부터 차례로 쓰이는 것과 단위비용이 줄지 않는 것을 확인합니다.
- 4간선별 유량 표에서 어디로 얼마가 흘렀는지, 검산 세 가지가 통과했는지 봅니다.
- 5「비용을 안 보고 흘리면」 줄과 비교해 비용 축이 무엇을 바꾸는지 확인합니다.
자주 묻는 질문
간선마다 단위 비용이 하나 더 붙는다는 점이 다릅니다. 최대 유량은 「얼마나 흘릴 수 있나」만 보지만, 여기서는 같은 양을 흘리는 여러 방법 중 비용이 가장 적은 것을 찾습니다. 흘리는 양은 두 계산이 같고 비용만 달라집니다.
잔여 그래프에서 비용이 가장 싼 길을 찾아 흘릴 수 있는 만큼 흘리기를 되풀이하는 방법입니다. 최대 유량이 간선 수가 가장 적은 길을 고르는 것과 달리 여기서는 비용이 가장 싼 길을 고릅니다. 매번 가장 싼 길로만 늘리면 각 단계의 유량이 그 유량값에서 비용 최소가 된다는 정리가 근거입니다.
잔여 그래프에 음수 비용 간선이 반드시 생기기 때문입니다. u→v로 c원짜리를 흘리면 되무르기용 v→u 간선이 만들어지는데, 무르면 냈던 비용을 돌려받으므로 그 간선의 비용은 −c입니다. 다익스트라는 음수 간선에서 틀린 답을 내므로 벨만–포드를 쓰거나 존슨 퍼텐셜로 비용을 비음수로 바꿔야 합니다. 이 계산기는 벨만–포드를 씁니다.
싼 길이 먼저 꽉 차고 남은 길이 비싸지기 때문입니다. 매 단계에서 잔여 그래프의 최단 비용은 이전 단계보다 작아질 수 없고, 이 성질이 SSP가 최적을 낸다는 증명의 뼈대이기도 합니다. 표에서 단위비용 열이 내려가지 않는 것으로 확인할 수 있습니다.
풀 수 있습니다. 공장마다 공급량을 용량으로 준 간선을 가상의 출발점에서 잇고, 창고마다 수요량을 용량으로 준 간선을 가상의 도착점으로 이으면 그대로 최소 비용 유량 문제가 됩니다. 사람을 일에 배정하는 배정 문제도 용량을 모두 1로 둔 같은 틀입니다. 예시의 「수송 문제」를 눌러 보세요.
넣을 수 없습니다. 원래 간선에 음수 비용이 있으면 잔여 그래프에 음수 순환이 생겨 SSP의 전제가 깨지기 때문입니다. 이 계산기는 단위비용을 0 이상만 받습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 검증은 가능한 모든 정수 흐름을 전수로 훑어 (최대 유량, 그 유량에서의 최소 비용)을 구한 것과 대조했습니다. 되무르기가 필요한 판을 포함해 무작위로 만든 100벌 남짓의 작은 판에서 유량과 비용이 모두 일치하는 것을 확인했습니다.
- 결과 자체도 매번 검산해 화면에 보입니다. 출발점·도착점을 뺀 모든 정점에서 유입 = 유출인지, 어느 간선도 용량을 넘지 않았는지, 간선별 비용의 합이 총비용과 맞는지 세 가지입니다.
- 잔여 그래프의 역방향 간선 비용이 음수라 다익스트라를 쓸 수 없다는 것이 이 알고리즘의 핵심 함정입니다. 이 구현은 벨만–포드를 씁니다. 느리지만 여기서 다루는 크기(정점 20개·간선 60개)에서는 문제가 없고 음수 간선을 그대로 다룰 수 있습니다.
- 「비용을 안 보고 흘리면」 줄은 같은 판에서 간선 수가 가장 적은 길부터 쓰는 에드몬드–카프 방식으로 흘려 본 값입니다. 유량은 같고 비용만 더 드는 것을 나란히 보이려는 것입니다.
- 단위비용은 0 이상만 받습니다. 음수 비용이 있으면 잔여 그래프에 음수 순환이 생겨 최단 경로 증가법의 전제가 깨집니다.
- 용량과 비용은 정수로 넣는 것을 권합니다. 소수도 계산은 되지만 증가 경로가 늘어나 표가 길어집니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.