DFS는 스택 BFS는 큐를 이용해서 풀기로 결정했다.
각 그래프는 빠른 조회를 위해서 딕셔너리를 이용해서 저장했다.
DFS와 BFS가 처음에는 이해가 어려웠는데 아래의 절차대로 생각을 하면서 문제를 푸니까 금방 풀렸다.
def dfs(graph, start_node):
visited, need_visit = list(), list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop()
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
def bfs(graph, start_node):
visited = list()
need_visit = list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop(0)
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
n,m,v = map(int,input().split())
G = dict()
for i in range(n):
G[i+1] = []
for _ in range(m):
n1, v1 = map(int,input().split())
G[v1].append(n1)
G[n1].append(v1)
for i in range(n):
G[i+1].sort(reverse = True)
print(" ".join(map(str,dfs(G,v))))
for i in range(n):
G[i+1].sort()
print(" ".join(map(str,bfs(G,v))))
기본적인 DFS와 BFS 문제였기때문에, 막히거나 고민했던 점은 없었다.
마냥 어렵게만 느꼈던 BFS, DFS도 절차적으로 잘 정리하고서 접근하니 풀만하다는 걸 배웠다.