728x90
반응형
DFS와 BFS는 해당 블로그에서도 한번 정리한 적 있고 이 문제도 아이디어를 떠올린 후 기본 구현법만 알면 쉽게 풀 수 있다.
핵심 아이디어는 입력받는 그래프의 구조를 재배열 는 것이다.
에를 들어 [1,2], [1,3], [1,4], [2,4], [3,4] 이렇게 전달을 받았다고 가정한다.
이를 다시 정리해서 첫번째 배열 자리에는 2,3 // 두 번째 배열 자리에는 1,4 이런 식으로 n번째 원소의 자리가 연관되어 있는 숫자들이 오도록 재배치해서 정렬해주는 것이다. 또한 문제 조건에서 작은 수 먼저 탐색하는 조건을 붙여줬으니 오름 차순으로 정렬한다.
전체 코드는 아래와 같다.
import sys
from collections import deque
n, m, v = map(int,sys.stdin.readline().split())
arr = [[] for i in range(n+1)]
p1 = []
p2 = []
dfs_ans = [False] * (n+1)
bfs_ans = [False] * (n+1)
for i in range(m): #입력 받은 배열 재배치
temp = list(map(int,sys.stdin.readline().split()))
if temp[0] not in arr[temp[1]]:
arr[temp[1]].append(temp[0])
if temp[1] not in arr[temp[0]]:
arr[temp[0]].append(temp[1])
for i in range(len(arr)):
arr[i].sort() #작은 것 우선 탐색하기위해서 오름차순으로 정렬
def DFS(graph, start, visited, pt):
visited[start] = True
pt.append(start)
for j in graph[start]:
if visited[j] == False:
DFS(graph,j,visited,pt)
def BFS(graph, start, visited, pt):
q = deque([start])
visited[start] = True
while q:
v = q.popleft()
pt.append(v)
for i in graph[v]:
if visited[i] == False:
q.append(i)
visited[i] = True
DFS(arr,v,dfs_ans,p1)
BFS(arr,v,bfs_ans,p2)
print(*p1)
print(*p2)
728x90
반응형
'Algorithm & Data Structure' 카테고리의 다른 글
백준 - 1012번(DFS,BFS 문제지만 완전 탐색으로 품) (0) | 2022.02.23 |
---|---|
백준 - 2667번(DFS,BFS 문제지만 완전탐색으로 품) (0) | 2022.02.23 |
Heap 자료구조 (0) | 2022.02.19 |
백준 - 10816번(이진탐색) (0) | 2022.02.06 |
백준 - 1920번(이진탐색) (0) | 2022.02.06 |