🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💛 백준
[최고빈출 DFS, BFS 기본문제] DFS와 BFS(1260번)
안오늘
2021. 7. 2. 16:40
1. 문제 설명
https://www.acmicpc.net/problem/1260
2. 나의 풀이
from collections import deque
# n: 정점의 개수, m: 간선의 개수, v: 시작 정점
n, m, v = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [False for _ in range(n+1)] #각 노드가 방문된 정보를 표현
for i in range(m): #중요한 점! sort로 정렬해주고 stack이나 queue에 넣어야 한다.
start, end = map(int, input().split())
graph[start].append(end)
graph[end].append(start)
graph[start].sort()
graph[end].sort()
def DFS(graph, start, visited):
visited[start] = True #현재 노드를 방문 처리
print(start, end=' ')
for i in graph[start]: #현재 노드와 연결된 다른 노드를 재귀적으로 방문
if not visited[i]:
DFS(graph, i, visited)
def BFS(graph, start, visited):
queue = deque([start]) #큐 구현을 위해 deque라이브러리 사용
visited[start] = True #현재 노드를 방문 처리
while queue: #큐가 빌 때까지 반복
vertex = queue.popleft() #큐에서 하나의 원소를 뽑아 출력하기
print(vertex, end=" ")
for i in graph[vertex]: #아직 방문하지 않은 인접한 원소들을 큐에 삽입
if not visited[i]:
queue.append(i)
visited[i] = True
DFS(graph, v, visited)
visited = [False for _ in range(n+1)] #각 노드가 방문된 정보를 표현
print()
BFS(graph, v, visited)
3. 깨달은점
graph[start].append(end)
graph[end].append(start) 으로 연결해준뒤, sort로 정렬한 후 stack이나 queue에 넣어야 한다.