본문 바로가기

정리/알고리즘

[알고리즘] 이분매칭

[알고리즘 소개] 

이분 그래프에서 최대 매칭을 구하는 알고리즘

 


[코딩 방법]

  1. A, B그룹이 어디에 매칭됐는지를 기록할 A[i], B[i], dfs마다 쓸 visited[i], 인접그래프 2차원 배열 adj (A는 안 쓰는 경우가 많음)
  2. 인접그래프를 채워주고 A그룹의 모든 정점들에 대해 dfs를 시작. 시작 전에 visited는 전부 false로 초기화
  3. 재귀에 들어오면 먼저 visited[cur]을 true로 변환
  4. cur의 모든 인접한 정점인 next에 대해 if (B[next] == -1 || !visited[B[next]] && dfs(B[next])이면 B[next] = cur, A[cur] = next로 바꾸고 true반환
  5. 그렇지 않다면 false반환.
  6. 재귀를 마치고 true가 돌아왔으면 매칭 성공

[시간 복잡도]

O(V * E)

 


[공부용 링크]

https://blog.naver.com/kks227/220807541506