반응형
문제보기
DFS와 BFS는 자주 쓰이는 알고리즘이기 때문에 정리해두면 좋습니다.
파이썬(Python3) 코드
from collections import deque
def bfs(graph, start):
for i in graph:
graph[i].sort()
explored, queue = set(), deque([start])
explored.add(start)
track_list = [start]
while queue:
v = queue.popleft() # queue.popleft()
if v in graph:
for w in graph[v]:
if w not in explored:
explored.add(w)
track_list.append(w)
queue.append(w)
return track_list
def dfs(graph, start):
for i in graph:
graph[i].sort(reverse=True)
track_list, explored, stack = list(), set(), deque([start])
while stack:
v = stack.pop() # one difference from BFS is to pop last element here instead of first one
if v in explored:
continue
explored.add(v)
track_list.append(v)
if v in graph:
for w in graph[v]:
if w not in explored:
stack.append(w)
return track_list
n, m, v = map(int, input().split())
graph = {}
for _ in range(m):
a, b = map(int, input().split())
if a in graph:
graph[a].append(b)
else:
graph[a] = [b]
if b in graph:
graph[b].append(a)
else:
graph[b] = [a]
print(*dfs(graph, v))
print(*bfs(graph, v))
반응형
'DEVLOG > Algorithms' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 - 파이썬 풀이 / 트라이(trie) 자료구조 (2) | 2019.09.25 |
---|---|
[프로그래머스] 완주하지 못한 선수 - 파이썬 풀이 (0) | 2019.09.25 |
[LINE 코딩테스트] 상반기 기출문제 파헤쳐보기 (1) | 2019.09.20 |
[파이썬(Python)] 회전행렬 / 2차원배열 회전하는 법 구현하기 (0) | 2019.09.19 |
[알고리즘/코딩테스트] 2019 NAVER 신입 공채 준비하기 (0) | 2019.09.18 |
댓글