그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
출처 : https://www.acmicpc.net/problem/1260
- BFS, DFS 개념 코드 응용
- 연결되어 있는 노드들을 문제에서 요구하는 입력으로 바꾼 후 개념 적용
mine
from collections import deque 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, start, visited): # 큐 구현을 위해 deque 라이브러리 사용 queue = deque([start]) # 현재 노드 방문 처리 visited[start] = True # 큐가 빌 때까지 반복 while queue: # 큐에서 하나의 원소를 뽑아 출력하기 v = queue.popleft() print(v, end= ' ') # 아직 방문하지 않은 인접한 원소들을 큐에 삽입 for i in graph[v]: if not visited[i]: queue.append(i) visited[i] = True n, m, v = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): x,y=map(int, input().split()) graph[x].append(y) graph[y].append(x) for g in graph: g.sort() visited=[False]*(n+1) dfs(graph, v, visited) print() visited=[False]*(n+1) bfs(graph, v, visited)
개념 설명 및 기본 코드 출처 : https://www.youtube.com/watch?v=PqzyFDUnbrY