BOJ

백준 1260. DFS와 BFS [Python]

Hoo_Dev 2022. 3. 27. 23:49
def dfs(v):
    visited[v] = True
    print(v, end=' ')
    for i in graph[v]:
        if visited[i] == False:
            visited[i] = True
            dfs(i)

def bfs(v):
    queue = []
    queue.append(v)
    visited[v] = False
    while queue:
        q = queue.pop(0)
        print(q, end=' ')
        for i in graph[q]:
            if visited[i] == True:
                visited[i] = False
                queue.append(i)

N, M, V = map(int, input().split())
arr = []
visited = [False] * (N+1)
for _ in range(M):
    p1, p2 = map(int, input().split())
    arr.append(p1)
    arr.append(p2)

graph = [[] for _ in range(N+1)]
for i in range(0, len(arr), 2):
    graph[arr[i]].append(arr[i+1])
    graph[arr[i+1]].append(arr[i])

for j in range(1, N+1):
    graph[j].sort()

dfs(V)
print()
bfs(V)

크게 봐야 할 부분은 1. 작은 노드를 먼저 방문,  2. DFS를 거친 방문표시는 False -> True로 바껴있으므로 방문표시를 반대로 해주기 나머진 평범한 DFS, BFS와 같다.

'BOJ' 카테고리의 다른 글

백준 1931. 회의실 배정 [Python]  (0) 2022.03.31
백준 2309. 일곱 난쟁이 [Python]  (0) 2022.03.29
백준 2798. 블랙잭 [Python]  (0) 2022.03.29
백준 10870. 피보나치 수 5 [Python]  (0) 2022.03.29
백준 10872. 팩토리얼 [Python]  (0) 2022.03.29