큐를 활용해 너비 우선 탐색을 시행하는 예시 코드이다.
C++ - Flood Fill BFS
// BFS 예시 코드
#include <bits/stdc++.h>
using namespace std;
int board[502][502];
bool vis[502][502];
int n = 7, m = 10; // n은 가로 길이, m은 세로 길이
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
queue<pair<int, int>> Q;
vis[0][0] = true;
Q.push(make_pair(0, 0));
while(!Q.empty()) {
pair<int, int> cur = Q.front(); Q.pop();
cout << '(' << cur.second << ", " << cur.first << ") -> ";
for (int dir = 0; dir < 4; dir++) {
int ny = cur.first + dy[dir];
int nx = cur.second + dx[dir];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if (vis[ny][nx] || board[ny][nx] != 1) continue;
vis[ny][nx] = true;
Q.push(make_pair(ny, nx));
}
}
return 0;
}
Python - 인접 리스트로 주어진 그래프에 대한 BFS
import collections
graph =[[], [1], [1, 3]] # 인접 리스트로 주어진 그래프
def bfs(start_v):
discovered = [start_v]
queue = collections.deque([start_v])
while queue:
v = queue.popleft()
for w in graph[v]:
if w not in discovered:
discovered.append(w)
queue.append(w)
return discovered
연결되어 있고 방문하지 않은 정점들을 전부다 큐에 넣고 방문 처리한다.
큐가 빌 때 까지 큐의 맨 앞의 정점에 대해 이를 반복한다.
출처
C++ 코드
https://blog.encrypted.gg/941?category=773649
[실전 알고리즘] 0x09강 - BFS
안녕하세요 여러분, 드디어 올 것이 왔습니다. 마음의 준비를 단단히 하셔야 합니다.. 드디어 실전 알고리즘 강의에서 첫 번째 고비에 도달했는데 이 강의와 함께 이번 고비를 잘 헤쳐나가면 좋
blog.encrypted.gg
Python 코드
https://book.naver.com/bookdb/book_detail.nhn?bid=16406247
파이썬 알고리즘 인터뷰
코딩 테스트와 인터뷰를 준비하는 취준생과 이직자를 위한 알고리즘 문제 풀이 완벽 마스터!세계 최고 온라인 문제 풀이 사이트인 리트코드(LEETCODE)의 기출문제 풀이와 분석! 200여 개가 넘는 일
book.naver.com
'Algorithm > 이론' 카테고리의 다른 글
배열로 Heap 구현 예시 (0) | 2022.09.11 |
---|---|
다익스트라 알고리즘 예시 코드 [C++, Python] (0) | 2022.08.25 |
배열 3개로 연결리스트 흉내내기 (0) | 2022.07.22 |
재귀로 조합 구현하기 [C++} (0) | 2022.07.08 |
재귀로 순열 구현하기 [C++] (0) | 2022.07.08 |