- 문제 : DFS와 BFS
- 난이도 : 실버 2
- 언어 : Python
- 문제 링크 : https://www.acmicpc.net/problem/1260
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 |