from collections import deque
n, m, v = map(int,input().split())
#vertex 개수만큼 그래프를 초기화해준다. 앞에 []는 0번째 vertex는 없기 때문
graph = [[] for _ in range(n+1)]
#방문처리를 위한 visited 자료구조 준비
#처음엔 모두 False로 만들고 방문하게 될 떄 True로 돌려준다.
visited = [False] * (n+1)
for i in range(m):
a, b = map(int,input().split())
# 입력 받을 때 vertex번호대로 넣어주기 위함
# Ex) [[], [2,3,4], [1,4], [1,4], [1,2,3]] 0번 1번 2번 3번 4번 vertex를 표현
graph[a].append(b)
graph[b].append(a)
graph[a].sort()
graph[b].sort()
def DFS(graph,v,visited):
visited[v] = True
print(v,end=" ")
for i in graph[v]:
if not visited[i]:
DFS(graph,i,visited)
def BFS(graph, v, visited):
visited = [False] * (n + 1)
queue = deque([v])
visited[v] = True
while queue:
pop = queue.popleft()
print(pop, end=' ')
for i in graph[pop]:
if not visited[i]:
queue.append(i)
visited[i] = True
DFS(graph,v,visited)
print()
BFS(graph,v,visited)
# 두 알고리즘의 가장 큰 차이점은 DFS의 경우 재귀호출을 사용해서 확인하던 vertex의 다른 연결값이 있으면 그 값을 가서 확인하고 방문처리하고 또 다시 방문하여 확인처리 하는 것이다.
# BFS의 경우엔 만약 1번 노드를 확인할 땐 1번 노드의 인접 노드들을 먼저 다 확인 한 뒤 그 다음 인접 노드를 확인하는 방식으로 진행된다.
#방문처리가 끝나면 확인할 필요 없이 queue에 들어가 있는 순서대로 출력해주면 된다.
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][구현] 1100. 하얀 칸 (파이썬/Python) (0) | 2021.11.01 |
---|---|
[백준][구현] 2914. 저작권(파이썬/Python) (0) | 2021.11.01 |
[백준][구현] 2455. 지능형 기차 (파이썬/Python) (0) | 2021.10.29 |
[백준][구현] 1475. 방 번호 (파이썬/Python) (0) | 2021.10.29 |
[백준][구현] 10808. 알파벳 개수 (파이썬/Python) (0) | 2021.10.28 |