다른 이유는 없고 너무 많이 나오는 개념이다.
계속해서 인터넷에서 찾아보기엔 시간이 너어무 아까워서 여기에 적어놓으려고 한다.
결국 내가 보기위해 적는 것이다.
DFS, BFS 둘 다 그래프 탐색
에 사용할 수 있지만, 탐색 방식과 장단점이 다르다.
문제에 따라 적절한 알고리즘을 선택해야 한다.
현재 노드에서 출발하여 연결된 노드를 차례대로 탐색하며, 더 이상 탐색할 노드가 없을 때까지 재귀적으로 호출한다.
😀 장점:
🙁 단점:
visited = [False] * (n+1) # 예시
sys.setrecursionlimit()
을 설정해야 한다.import sys
sys.setrecursionlimit(10**6) # 예시
일반적으로 재귀 호출의 깊이는 1000~3000이다.
단, 너무 큰 값을 설정하면 시스템의 스택 오버플로를 방지하지 못할 수 있고, 이는 프로그램의 비정상 종료로 이어질 수 있다.
기본적인 코드 구조
'''
def DFS(x,y):
if 재귀를 종료시킬수 있는 조건문:
return
변수 업데이트
if visited == False and graph나 다른 조건에 위배되지 않는다면:
visited[] = True
DFS(new_x, new_y)
'''
현재 노드에서 출발하여 연결된 모든 노드를 큐에 삽입하고, 큐가 비어질 때까지 큐에서 노드를 꺼내 탐색한다.
작동방식
😀 장점:
최소 거리
를 보장합니다.무한 루프
에 빠지지 않습니다.🙁 단점:
from collections import deque
queue = deque() # 예시
'''
def BFS(x,y):
queue.append((x,y))
while queue:
a,b = queue.popleft()
if vistied == False and new_a, new_b가 조건에 위배되지 않는다면
queue.append((nx,ny))
'''