https://www.acmicpc.net/problem/1260
- 인접리스트 문제 adjList
- DFS는 재귀, BFS는 Queue로 푼다.
- visited는 방문했음을 알리는 배열로 타입은 bool이다.
BFS
(BFS 함수) - 23.5.7 풀이
DFS
(DFS 함수)
(최종 출력)
from collections import deque
n, m, v = map(int, input().split())
adjList = [[] for _ in range(n+1)]
bfsQueue = deque([])
# visited 2차원 배열 - bool
visited = [False for _ in range(n+1)]
for i in range(m):
f, t = map(int, input().split())
adjList[f].append(t)
adjList[t].append(f)
# dfs - Recursion
def dfs(num) :
print(num, end = ' ')
for element in adjList[num] :
if visited[element] :
continue
visited[element] = True
dfs(element)
# bfs - Queue
def bfs() :
while bfsQueue :
currentNumber = bfsQueue.popleft()
print(currentNumber, end=' ')
for element in adjList[currentNumber] :
if visited[element] :
continue
visited[element] = True
bfsQueue.append(element)
def clearVisited() :
global visited
visited = [False for _ in range(n+1)]
# sort
for i in range(n+1):
adjList[i].sort()
# dfs - 방문 처리랑 인자 담은 dfs 호출
visited[v] = True
dfs(v)
print()
# visited 배열 초기화
clearVisited()
# bfs - 방문 처리랑 큐에 출발 노드 넣기
visited[v] = True
bfsQueue.append(v)
bfs()