그래프의 표현 예제 - 3

문제 분석

  • 트리의 경우에는 항상 이분 그래프가 된다.

  • 사이클이 발생하지 않으면 탐색을 하면서 다음 노드를 이번 노드와 다른 집합으로 지정하면 되기 때문이다.

  • 사이클이 발생했을 때는 이분 그래프가 불가능할 때가 있다.

  • 기존의 탐색 메커니즘에서 탐색한 노드에 다시 접근하게 됐을 때 현재 노드의 집합과 같으면 이분 그래프가 불가능하다는 것으로 판별할 수 있다.

손으로 풀어보기

  1. 입력된 그래프 데이터를 인접 리스트로 구현한다.

img_6.png
  1. 모든 노드로 각각 DFS 탐색 알고리즘을 적용해 탐색을 수행한다. DFS를 실행할 때 현재 노드에서 연결된 노드 중 이미 방문한 노드가 나와 같은 집합이면 이분 그래프가 아닌 것으로 판별한다. 실행 결과가 이분 그래프가 아니면 이후 노드는 탐색하지 않는다.

img_7.png
  1. 이분 그래프 여부를 정답으로 출력한다.

  2. 테스트 케이스의 개수만큼 과정 1~3을 반복한다.

모든 노드로 DFS를 실행하는 이유는 여러 개의 부분 그래프로 이뤄진 케이스가 존재할 수 있기 때문이다.

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated