/* 문제 */
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
DFS와 BFS를 둘 다 구현하는 문제다. 다시 한 번 정리한다는 생각으로 풀어봤다.
# 정답 코드
from collections import deque
import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline
# dfs
# 재귀 함수 이용, 함수가 호출되었을 때 방문처리 및 출력
def dfs(graph, v, visited):
visited[v] = True
print(v, end=' ')
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
# bfs
# 큐 이용, 큐에 들어갈 때 방문처리, 큐에서 pop되었을 때 출력
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
while queue:
v = queue.popleft()
print(v, end=' ')
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
n, m, s = map(int, input().split())
graph = [[] for _ in range(n + 1)]
visited_dfs = [False] * (n + 1)
visited_bfs = [False] * (n + 1)
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, s, visited_dfs)
print()
bfs(graph, s, visited_bfs)
정말 기본적인 코드이므로 꼭 외워야겠다.
728x90
'Algorithm' 카테고리의 다른 글
[1012] 유기농 배추 - Python (0) | 2023.02.17 |
---|---|
[2667] 단지번호붙이기 - Python (0) | 2023.02.16 |
[2606] 바이러스 - Python (0) | 2023.02.16 |
[24444] 알고리즘 수업 - 너비 우선 탐색 1 - Python (0) | 2023.02.16 |
[24480] 알고리즘 수업 - 깊이 우선 탐색 2 - Python (0) | 2023.02.16 |