728x90
반응형
너비 우선 탐색(BFS)은 시작 정점을 방문한 후 시작 정점에 인접한 모든 정점들을 먼저 탐색하는 방법이다.
가까운 정점을 전부 저장해놓고 순서대로 방문해야 하기 때문에 스택으로는 구현이 어렵기에 큐(Queue)를 사용한다.
최단거리를 구하는 문제에 많이 사용되는 알고리즘이다. 아래 코드는 BFS코드 예시이다.
BFS 경로 탐색(인접 리스트, 1260번 DFS와 BFS)
from collections import deque
def bfs(start):
queue = deque([start])
while queue:
node = queue.popleft()
print(node, end=' ')
check[node] = 1
for n in sorted(li[node]):
if check[n] == 0:
queue.append(n)
check[n] = 1
N, M, V = map(int, input().split())
li = [[] for _ in range(N+1)]
for _ in range(M):
a, b = map(int, input().split())
li[a].append(b)
li[b].append(a)
check = [0]*(N+1)
bfs(V)
BFS 문제 풀이(인접 행렬, 1012번 유기농 배추)
from collections import deque
def bfs(y, x):
queue = deque()
queue.append((y, x))
d = [(-1, 0), (1, 0), (0, -1), (0, 1)]
while queue:
y, x = queue.popleft()
for dy, dx in d:
Y, X = y+dy, x+dx
if (0 <= Y < N) and (0 <= X < M) and graph[Y][X] == 1:
queue.append((Y, X))
graph[Y][X] = 0
for case in range(int(input())):
M, N, K = map(int, input().split())
graph = [[0]*M for _ in range(N)]
for _ in range(K):
x, y = map(int, input().split())
graph[y][x] = 1
res = 0
for i in range(N):
for j in range(M):
if graph[i][j] == 1:
graph[i][j] = 0
bfs(i, j)
res += 1
print(res)
백준 알고리즘 문제 풀이)
https://jinho-study.tistory.com/1075
https://jinho-study.tistory.com/1076
https://jinho-study.tistory.com/1084
https://jinho-study.tistory.com/1087
https://jinho-study.tistory.com/1099
https://jinho-study.tistory.com/1100
https://jinho-study.tistory.com/1107
728x90
반응형
'Agorithm > 자료구조, 알고리즘 정리' 카테고리의 다른 글
퇴각검색(Backtracking) (백준 문제 포함) (0) | 2021.03.20 |
---|---|
동적 계획법(Dynamic programming) (백준 문제 포함) (0) | 2021.03.17 |
깊이 우선 탐색(depth-first search, DFS) (백준 문제 포함) (0) | 2021.03.10 |
큐(Queue), 덱(Deque) (백준 문제 포함) (0) | 2021.03.05 |
스택(Stack) (백준 문제 포함) (0) | 2021.03.05 |