그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
첫째 줄에는 정점의 개수 N, 간선의 개수 M, 탐색을 시작할 정점의 번호 V가 주어진다.
def dfs(graph, v, visited) :
visited[v] = True
print(v, end = ' ')
for i in graph[v] :
if not visited[i] :
dfs(graph, i, visited)
visited1[V] = True
queue = deque([V])
print(V, end= ' ')
while queue :
q = queue.popleft()
for k in graph[q] :
if visited1[k] == False :
queue.append(k)
print(k, end = ' ')
visited1[k] = True
print()
N, M, V = map(int, input().split())
graph = [[] for i in range(N+1)]
for pair in range(M) :
a,b = map(int, input().split())
graph[a]+=[b]
graph[b]+=[a]
for i in range(len(graph)) :
graph[i].sort()
visited = [False] * (N +1)
visited1 = [False] * (N +1)
DFS와 BFS는 알고리즘 수업시간에 접해보았음에도 불구하고, 다시 공부해야 하는 상황이었다... 특히나 재귀함수에 약한 나로써는 DFS가 어렵게 느껴졌다. 그래도 기본적으로 이런식으로 구성된다는 것을 알게되었다. 앞으로 조금 더 심화한 문제들을 더 풀어가면서 DFS와 BFS에 대해서 조금 더 공부해 나갈 것이고, 어떤 문제에 DFS와 BFS를 적용하는 것이 더 좋을 지에 대한 문제도 계속해서 해결해 나갈 예정이다.
https://bio-info.tistory.com/152
https://www.youtube.com/watch?v=7C9RgOcvkvo