-
[백준 24444] 알고리즘 수업 - 너비 우선 탐색 1백준/BFS 2023. 9. 15. 16:16
최근에 DFS 백트래킹만 풀어서 BFS 복습하려고 품
visited 배열을 bool로 하는 것보다 bitset<SIZE>로 하는게 훨씬 공간복잡도와 시간복잡도 측면에서 좋다.
bitset도 direct memory access가 가능한 자료구조라 쓸 가치가 있다.
#include <iostream> #include <queue> #include <vector> #include <algorithm> #include <bitset> #define SIZE 100001 using namespace std; int N, M, R; vector<int> arr[SIZE]; int ans[SIZE]; bitset<SIZE> visited; void BFS(int R) { // 초기설정 visited.set(0); int cnt = 1; queue<int> q; visited[R] = 1; q.push(R); ans[R] = cnt++; while (!q.empty()) { int cur = q.front(); q.pop(); for (int i = 0; i < arr[cur].size(); i++) { int node = arr[cur][i]; if (!visited[node]) { visited[node] = 1; q.push(node); ans[node] = cnt++; } } } return; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> M >> R; int u, v; for (int i = 0; i < M; i++) { cin >> u >> v; arr[u].push_back(v); arr[v].push_back(u); } for (int i = 1; i <= N; i++) sort(arr[i].begin(), arr[i].end()); BFS(R); for (int i = 1; i <= N; i++) { cout << ans[i] << "\n"; } return 0; }
'백준 > BFS' 카테고리의 다른 글
[백준 21922] 학부 연구생 민상 (0) 2024.01.17 [백준 7576] 토마토 (1) 2024.01.09 [백준 13565] 침투 (0) 2023.09.12 [백준 2573] 빙산 (0) 2023.07.07 [백준 2178] 미로 탐색 (0) 2023.05.12