티스토리 뷰

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net


1. 문제 내용

 

 

2. 접근 방식

문제 이름에서 사용해야 할 알고리즘을 알려주고 있기 때문에 별다른 접근 방식은 없다.

 

 

3. 정답 코드

from collections import deque

def dfs(n):
    print(n, end=' ')
    visited[n] = True

    for i in graph[n]:
        if not visited[i]:
            dfs(i)


def bfs(n):
    visited[n] = True
    queue = deque([n])

    while queue:
        q = queue.popleft()
        print(q, end=' ')

        for i in graph[q]:
            if not visited[i]:
                visited[i] = True
                queue.append(i)


# main
n, m, v = map(int, input().split())

graph = [[] for _ in range(n + 1)]
for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

# 정점 번호가 작은 것이 먼저 오도록 정렬
for i in range(n + 1):
    graph[i].sort()

# 출력
visited = [False] * (n + 1)
dfs(v)
print()
visited = [False] * (n + 1)
bfs(v)
728x90