BFS & DFS 알고리즘

#너비 우선 탐색 #깊이 우선 탐색

백준 1260번 : DFS와 BFS

- 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색

1. 풀이

from collections import defaultdict

n, m, start = list(map(int,input().split()))
graph=defaultdict(list)

for _ in range(m):
  a,b=list(map(int,input().split()))
  graph[a].append(b)
  graph[b].append(a)

# 리버스 안하면 오른쪽부터 dfs돈다.
for a in graph.values():
  a.sort(reverse=True)

def dfs(graph, start_node):
  visited = list()
  need_visit = list()
  need_visit.append(start_node)
    
  while need_visit:
      node = need_visit.pop()
      if node not in visited:
          visited.append(node)
          need_visit.extend(graph[node])
  
  return visited

result=dfs(graph, start)
for i in result:
  print(i, end=' ')

print()
# 리버스 안하면 왼쪽부터 bfs돈다.
for a in graph.values():
  a.sort()

def bfs(graph, start_node):
  visited = list()
  need_visit = list()
  need_visit.append(start_node)

  while need_visit:
      node = need_visit.pop(0)
      if node not in visited:
          visited.append(node)
          need_visit.extend(graph[node])
  
  return visited

result=bfs(graph, start)
for i in result:
  print(i, end=' ')

백준 1697번 : 숨바꼭질

- 그래프 이론, 그래프 탐색, 너비 우선 탐색

1. 정답

2. 두 번째 정답 풀이


백준 2606번 : 바이러스

- 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선탐색

1. 풀이


백준 1012번 : 유기농 배추

- 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선탐색

1. 풀이


백준 1325번 : 효울적인 해킹

- 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선탐색

1. 첫 풀이

2. 시간 내 풀이

첫 번째 풀이랑 다를 게 없는데 왜 시간초과가 안 뜨는 지 모르겠다. bfs count계산 후 로직은 두 풀이의 반복문을 비교해봤을 때 시간복잡도에 영향이 미미하고, bfs자체 로직도 첫 풀이가 오히려 반복문이 하나 더 줄어 있는데 말이다.


Last updated