백준 1260 DFS와 BFS

김민영·2022년 12월 28일
0

알고리즘

목록 보기
3/125

DFS와 BFS

풀이 계획

  • DFS, BFS 둘 다 구현해서 각자 결과 출력하기
input = sys.stdin.readline
from collections import deque
sys.setrecursionlimit(10**8)

def dfs(graph, start, visited):
    visited[start] = True
    dfs_ans.append(start)
    for i in graph[start]:
        if not visited[i]:
            dfs(graph, i, visited)


def bfs(graph, start, visited):
    queue = deque([start])
    visited[start] = True
    while queue:
        v = queue.popleft()
        for i in graph[v]:
            if not visited[i]:
                visited[i] = True
                queue.append(i)
                bfs_ans.append(i)


# 입력 받기
n, m, start = map(int, input().split())
graph = [[] for _ in range(n + 1)]

dfs_visited = [False for _ in range(n + 1)]
bfs_visited = [False for _ in range(n + 1)]

dfs_ans = []
bfs_ans = [start]

for _ in range(m):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)
for i in graph:
    i.sort()

dfs(graph, start, dfs_visited)
print(dfs_ans[0], end="")
for i in dfs_ans[1:]:
    print("", i, end="")

bfs(graph, start, bfs_visited)
print()
print(bfs_ans[0], end="")
for i in bfs_ans[1:]:
    print("", i, end="")
  • 두 탐색을 동시에 구현하다보니 변수명에 신경써야했음
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글