그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다.
그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오.
Input | Output |
---|---|
2 3 2 1 3 2 3 4 4 1 2 2 3 3 4 4 2 | YES NO |
# 코드
import sys
from collections import deque
input = sys.stdin.readline
k = int(input())
for _ in range(k):
v, e = map(int, input().split(' '))
edges = {i : [] for i in range(1, v+1)}
visited = {i : 0 for i in range(1, v+1)}
flag = True
for __ in range(e):
v1, v2 = map(int, input().split(' '))
edges[v1].append(v2)
edges[v2].append(v1)
for v_ in range(1, v+1):
if visited[v_] == 0 :
points = deque([])
points.append(v_)
visited[v_] = 1
while points:
v_ = points.popleft()
for new_v in edges[v_]:
if visited[new_v] == 0:
points.append(new_v)
visited[new_v] = -visited[v_]
else:
if visited[new_v] == visited[v_]:
flag = False
break
if flag == False :
break
if flag:
print("YES")
else:
print("NO")