[BOJ] 1707 이분 그래프
DFS, BFS
해당 문제는 이분 그래프인지 아닌지 판별해보는 문제이다.
이분 그래프에 대한 개념은 따로 포스팅 해두었다.
이분 그래프를 처기하기 위한 방법에는 1, 2 라는 컬러를 두고 3 - color 를 통하여 색을 다르게 주는 방식도 있고, color, -color 로 하여 1, -1로 주는 방법도 있다.
DFS와 BFS코드를 각각 구현해두었다. 모두 정상적으로 동작한다.
import sys
from collections import deque
def dfs(v, color):
# 현재 노드 방문 처리
visited[v] = 3 - color
for i in linked_list[v]:
if visited[i] == visited[v]:
return False
if visited[i] == 0:
if not dfs(i, visited[v]):
return False
return True
# def bfs(start, color):
# q = deque()
# q.append(start)
# visited[start] = color
# while q:
# cur_i = q.popleft()
# for nxt in linked_list[cur_i]:
# # 미방문 -> 방문 처리
# if visited[nxt] == 0:
# visited[nxt] = 3 - visited[cur_i]
# q.append(nxt)
# # 겹침 -> 종료
# if visited[nxt] == visited[cur_i]:
# return False
# return True
def solution(v, e):
flag = True
for i in range(1, v + 1):
if visited[i] == 0:
if not dfs(i, 1):
flag = False
break
# if not bfs(i, 1):
# flag = False
# break
if flag:
print("YES")
else:
print("NO")
if __name__ == "__main__":
sys.setrecursionlimit(100000)
K = int(sys.stdin.readline().rstrip())
for _ in range(K):
V, E = map(int, sys.stdin.readline().rstrip().split())
linked_list = [[] for _ in range(V + 1)]
visited = [0] * (V + 1)
for _ in range(E):
sv, ev = map(int, sys.stdin.readline().rstrip().split())
linked_list[sv].append(ev)
linked_list[ev].append(sv)
solution(V, E)