본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 1260번 DFS와 BFS

by 현장 2021. 12. 29.

-코드

from collections import deque


def dfs(start):
    visited[start] = True
    print(start, end=' ')
    for i in range(1, n + 1):
        if not visited[i] and graph[start][i] == 1:
            dfs(i)


def bfs(start):
    queue = deque([start])
    visited2[start] = True
    while queue:
        start = queue.popleft()
        print(start, end=' ')
        for i in range(1, n + 1):
            if not visited2[i] and graph[start][i] == 1:
                queue.append(i)
                visited2[i] = True


n, m, v = map(int, input().split())
graph = [[0] * (n + 1) for _ in range(n + 1)]
visited = [False] * (n + 1)
visited2 = [False] * (n + 1)
cnt = n
for _ in range(m):
    a, b = map(int, input().split())
    graph[a][b] = 1
    graph[b][a] = 1
dfs(v)
print()
bfs(v)

예전에 처음 봤을 때 감이 안 잡히던 문제였습니다. 처음에 너비 우선 탐색과 깊이 우선 탐색의 탐색 순서 같은 것은 이해를 했으나 코드를 어떻게 짜야할지 감이 안 잡혀서 책도 사서 읽고 해 봐도 몇 달 동안 풀리지 않아서 결국 참고를 많이 하여 해당 코드에 대한 이해를 하고 해결을 하였지만 혼자서 풀기에는 아직 무리인 것 같아 bfs와 dfs도 이분 탐색이나 dp처럼 많이 풀어야겠다고 생각을 했습니다.