<수학적 개념>
<자료구조적 개념>
<공통 개념>
adj = [[0] * 13 for _ in range(13)]
adj[0][1] = adj[0][7] = 1
...
# 현재 방문한 노드를 파라미터로 받는다
def dfs(now):
# 다음 방문할 연결된 노드를 탐색
for nxt in range(13):
if adj[now][nxt]:
dfs(nxt)
dfs(0)
from collections import deque
adj = [[0] * 13 for _ in range(13)]
adj[0][1] = adj[0][2] = 1
adj[1][3] = adj[1][4] = 1
...
def bfs():
dq = deque()
dq.append(0)
while dq:
now = dq.popleft()
for nxt in range(13):
if adj[now][nxt]:
dq.append(nxt)
bfs()
공통점
차이점
시간복잡도
# 시계방향
dy = (0, 1, 0, -1)
dx = (1, 0, -1, 0)
N = int(input())
chk = [[False * N for _ in range(N)]]
def is_valid_coord(y, x):
return 0 <= y < N and 0 <= x < N
# dfs 방식
def dfs(start_y, start_x):
chk[y][x] = True
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if is_valid_coord(ny, nx) and not chk[ny][nx]:
dfs(ny, nx)
# bfs 방식
def bfs(start_y, start_x):
q = deque()
q.append((start_y, start_x))
while len(q) > 0:
y, x = q.popleft()
chk[y][x] = True
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if is_valid_coord(ny, nx) and not chk[ny][nx]:
q.append((ny, nx))