ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 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