세리프 따라잡기
WEEK03- TIL DFS와 BFS 본문
DFS 기본 구현
1. 시작 노드에서 방문하지 않았으면 노드를 삽입해준다 == 방문 표시
2. 더 이상 방문이 불가능하다면, 탐색 중단하고 이전으로 돌아옴
*특징
1. 스택 or 재귀함수 사용
2. 한 방향으로 깊게 탐색
3. 깊이 제한 횟수를 늘려주자!
sys.setrecursionlimit(10**8) #깊이 제한
def dfs(arr, cur, visited):
visited[cur] = True
for i in arr[cur]:
if not visited[i]:
dfs(arr, cur, visited)
# 나는 dfs(arr, cur, visited) 부분을 defaultdict를 이용해 graph에 담아서 사용
def dfs(v):
visited[v]=1
print(v,end=' ')
for i in graph[v]:
if not graph[i]:
dfs(i)
BFS 기본 구현
1. 시작 노드에서 방문하지 않은 인접 노드를 큐에 삽입 == 방문 표시
2. 큐가 빌 때까지 큐에서 하나씩 꺼내서 방문하지 않은 인접 노드를 큐에 삽입 == 방문 표시
*특징
1. 큐를 사용 [덱이 더 효율적이라 deque로!]
2. 매 순간이 최적의 경우를 보장
3. 방문 체크를 큐에 넣기 전에 해줘야 한다
→ 불필요한 방문이 큐에 쌓여서 중복으로 방문되는 경우가 생겨, 메모리 초과가 발생
from collections import deque
def bfs(arr, start, visitet):
queue = deque([start])
visited[start] = True
while queue:
cur = queue.popleft()
for i in arr[cur]:
if not visited[i]:
queue.append(i)
visited[i] = True
'SW사관학교 정글' 카테고리의 다른 글
WEEK03 - TIL 플로이드 워셜 (0) | 2022.04.17 |
---|---|
WEEK03 - TIL 다익스트라 (0) | 2022.04.17 |
WEEK03- TIL 최소 스패닝 트리 (0) | 2022.04.15 |
WEEK02 - TIL 시간 복잡도(basic) (0) | 2022.04.12 |
WEEK02 - TIL 우선순위 큐(Priority Queue) (0) | 2022.04.11 |
Comments