도구스학업·수학

최소 비용 최대 유량 계산기

용량과 단위 비용이 붙은 네트워크에서 최대 유량을 가장 싸게 흘리는 방법을 찾습니다. 증가 경로를 단계별로 보이고, 흐름 보존·용량·비용 합을 결과에서 함께 검산합니다.

한 줄에 «출발 도착 용량 단위비용» 하나씩. 방향이 있는 그래프이고 정점 20개, 간선 60개까지 다룹니다.

s → t 최소 비용

16원

최대 유량 4단위를 흘리는 방법 중 가장 싼 값입니다. 단위당 평균 4원이 들었습니다.

최대 유량4단위
최소 비용16원
단위당 평균4원
비용을 안 보고 흘리면16원 (유량 4단위)
증가 경로2번
검산흐름 보존·용량·비용 합 모두 맞습니다

증가 경로 — 싼 길부터 차례로 흘린다

#경로단위비용흘린 양누적 비용
1s → a → t224
2s → b → t6216

단위비용은 줄어들지 않습니다. 싼 길이 먼저 꽉 차고 남은 길이 비싸지기 때문인데, 이 성질이 「매번 가장 싼 길로 늘리면 결국 전체가 최적이 된다」는 근거입니다.

간선별 유량

간선유량 / 용량단위비용비용
sa2 / 212
sb2 / 2510
at2 / 212
bt2 / 212

결과를 매번 검산합니다 — 출발점·도착점을 뺀 모든 정점에서 유입 = 유출인지, 어느 간선도 용량을 넘지 않았는지, 간선별 비용의 합이 총비용과 맞는지. 지금 결과는 셋 다 통과했습니다.

핵심 함정은 역방향 간선의 비용이 음수라는 것입니다. u→v로 c원짜리를 흘리면 되무르기용 v→u 간선이 생기는데, 무르면 냈던 비용을 돌려받으므로 그 간선의 비용은 −c입니다. 그래서 잔여 그래프에는 음수 간선이 반드시 생기고 다익스트라를 그대로 쓸 수 없습니다. 이 계산기는 벨만–포드를 씁니다.
최대 유량만 보는 계산기와 판은 같지만 간선마다 단위 비용이 하나 더 붙습니다. 같은 양을 흘리는 방법이 여럿일 때 어느 것이 싼지를 가리는 것이 이 도구의 존재 이유이고, 공장에서 창고로 물건을 나르는 수송 문제와 사람을 일에 배정하는 배정 문제가 모두 이 틀에 들어갑니다.

계산 방법

  1. 1한 줄에 «출발 도착 용량 단위비용»으로 간선을 적습니다.
  2. 2출발점과 도착점을 고릅니다.
  3. 3증가 경로 표에서 싼 길부터 차례로 쓰이는 것과 단위비용이 줄지 않는 것을 확인합니다.
  4. 4간선별 유량 표에서 어디로 얼마가 흘렀는지, 검산 세 가지가 통과했는지 봅니다.
  5. 5「비용을 안 보고 흘리면」 줄과 비교해 비용 축이 무엇을 바꾸는지 확인합니다.

자주 묻는 질문

간선마다 단위 비용이 하나 더 붙는다는 점이 다릅니다. 최대 유량은 「얼마나 흘릴 수 있나」만 보지만, 여기서는 같은 양을 흘리는 여러 방법 중 비용이 가장 적은 것을 찾습니다. 흘리는 양은 두 계산이 같고 비용만 달라집니다.

잔여 그래프에서 비용이 가장 싼 길을 찾아 흘릴 수 있는 만큼 흘리기를 되풀이하는 방법입니다. 최대 유량이 간선 수가 가장 적은 길을 고르는 것과 달리 여기서는 비용이 가장 싼 길을 고릅니다. 매번 가장 싼 길로만 늘리면 각 단계의 유량이 그 유량값에서 비용 최소가 된다는 정리가 근거입니다.

잔여 그래프에 음수 비용 간선이 반드시 생기기 때문입니다. u→v로 c원짜리를 흘리면 되무르기용 v→u 간선이 만들어지는데, 무르면 냈던 비용을 돌려받으므로 그 간선의 비용은 −c입니다. 다익스트라는 음수 간선에서 틀린 답을 내므로 벨만–포드를 쓰거나 존슨 퍼텐셜로 비용을 비음수로 바꿔야 합니다. 이 계산기는 벨만–포드를 씁니다.

싼 길이 먼저 꽉 차고 남은 길이 비싸지기 때문입니다. 매 단계에서 잔여 그래프의 최단 비용은 이전 단계보다 작아질 수 없고, 이 성질이 SSP가 최적을 낸다는 증명의 뼈대이기도 합니다. 표에서 단위비용 열이 내려가지 않는 것으로 확인할 수 있습니다.

풀 수 있습니다. 공장마다 공급량을 용량으로 준 간선을 가상의 출발점에서 잇고, 창고마다 수요량을 용량으로 준 간선을 가상의 도착점으로 이으면 그대로 최소 비용 유량 문제가 됩니다. 사람을 일에 배정하는 배정 문제도 용량을 모두 1로 둔 같은 틀입니다. 예시의 「수송 문제」를 눌러 보세요.

넣을 수 없습니다. 원래 간선에 음수 비용이 있으면 잔여 그래프에 음수 순환이 생겨 SSP의 전제가 깨지기 때문입니다. 이 계산기는 단위비용을 0 이상만 받습니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 검증은 가능한 모든 정수 흐름을 전수로 훑어 (최대 유량, 그 유량에서의 최소 비용)을 구한 것과 대조했습니다. 되무르기가 필요한 판을 포함해 무작위로 만든 100벌 남짓의 작은 판에서 유량과 비용이 모두 일치하는 것을 확인했습니다.
  • 결과 자체도 매번 검산해 화면에 보입니다. 출발점·도착점을 뺀 모든 정점에서 유입 = 유출인지, 어느 간선도 용량을 넘지 않았는지, 간선별 비용의 합이 총비용과 맞는지 세 가지입니다.
  • 잔여 그래프의 역방향 간선 비용이 음수라 다익스트라를 쓸 수 없다는 것이 이 알고리즘의 핵심 함정입니다. 이 구현은 벨만–포드를 씁니다. 느리지만 여기서 다루는 크기(정점 20개·간선 60개)에서는 문제가 없고 음수 간선을 그대로 다룰 수 있습니다.
  • 「비용을 안 보고 흘리면」 줄은 같은 판에서 간선 수가 가장 적은 길부터 쓰는 에드몬드–카프 방식으로 흘려 본 값입니다. 유량은 같고 비용만 더 드는 것을 나란히 보이려는 것입니다.
  • 단위비용은 0 이상만 받습니다. 음수 비용이 있으면 잔여 그래프에 음수 순환이 생겨 최단 경로 증가법의 전제가 깨집니다.
  • 용량과 비용은 정수로 넣는 것을 권합니다. 소수도 계산은 되지만 증가 경로가 늘어나 표가 길어집니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.