728x90
[파이썬] 백준 1260 : DFS와 BFS
https://www.acmicpc.net/problem/1260
실버 2
그래프, DFS, BFS
DFS, BFS의 구현 방법을 알고 있는 것을 전제로 제시된 문제이다.
다만 정점을 방문은 반드시 오름차순 순서로 이루어져야 하기 때문에, 인접한 정점들을 오름차순으로 정렬한 후에 접근할 수 있도록 구현해야 한다.
bfs구현을 할 때는 시간 복잡도가 O(1)인 deque을 이용하는 것이 더 빠르다.
코드
from collections import deque
import sys; input = sys.stdin.readline
def bfs(graph, start, visited):
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
def dfs(graph, start, visited):
visited[start] = True
print(start, end = ' ')
for i in graph[start]:
if not visited[i]:
dfs(graph, i, visited)
N, M, V = map(int, input().split())
graph = [[] for _ in range(N+1)]
for i in range(M):
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
for i in range(1, N+1): # 인접 정점을 오름차순 정렬한다.
graph[i].sort()
visited = [False] * (N+1)
dfs(graph, V, visited)
print()
visited = [False] * (N+1) # bfs탐색을 위해 방문 표시 리스트를 초기화한다.
bfs(graph, V, visited)
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[파이썬] 백준 3184 : 양 (0) | 2022.03.30 |
---|---|
[파이썬] 백준 2210 : 숫자판 점프 (0) | 2022.03.28 |
[파이썬] 백준 11727 : 2xn 타일링 2 (0) | 2022.03.26 |
[파이썬] 백준 1012 : 유기농 배추 (0) | 2022.03.26 |
[파이썬] 백준 22659 : 구간 합 구하기4 (0) | 2022.03.24 |