1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| from collections import deque
def odd_even(n):
return 1 if n % 2 == 0 else -1
def bfs(current):
level = 0
queue = deque([(current, level + 1)])
vi[current] = odd_even(level) # 깊이에 따라, 서로 다른 색상을 칠해준다. (인접한 정점 끼리는 같은 색상)
while queue:
now = queue.popleft()
curNode, level = now
for nxt in graph[curNode]:
if not vi[nxt]: # 방문한 적이 없다면 두 색상 중 하나로 칠해준다.
queue.append((nxt, level + 1))
vi[nxt] = odd_even(level)
elif vi[nxt] == odd_even(level): # 방문한 적이 있고, 현재 칠하려는 색상과 같으면 pass
continue
elif vi[nxt] != odd_even(level): # 방문한 적이 있고, 현재 칠하려는 색상과 다르다면, 인접리스트가 아니다.
return False
return True
result = []
vertex, edge = map(int, input().split())
graph = [[] for _ in range(vertex)]
vi = [0] * (vertex)
for _ in range(edge):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
graph_list = [] # 그래프의 정점이 서로 이어지지 않았을 수 있음 (두개의 그래프 존재 가능성)
for i in range(vertex):
if not vi[i]:
graph_list.append(bfs(i))
print(*result)
|