본문 바로가기

공부합시다

BFS 너비 우선 탐색

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
 
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
 
int main() 
{
    int n, m, v;
    scanf("%d %d %d", &n, &m, &v);
    
    vector<vector<int>> adj(n+1);
    for (int i = 0; i < m; i++)
    {
        int u, v;
        scanf("%d %d", &u, &v);
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    
    for (int i = 1; i <= n; i++)
        sort(adj[i].begin(), adj[i].end());
    
    vector<bool> visited(n, false);
    queue<int> Q;
    Q.push(v);
    visited[v] = true;
    
    while (!Q.empty())
    {
        int curr = Q.front();
        Q.pop();
        printf("%d ", curr);
        for (int next : adj[curr])
        {
            if (!visited[next])
            {
                visited[next] = true;
                Q.push(next);
            }
        }
    }

    
    return 0;
}

 

'공부합시다' 카테고리의 다른 글

소수 판별법 - 에라토스테네스의 체  (0) 2020.08.04
조합 수 구하기  (0) 2020.07.19
DFS 깊이 우선 탐색  (0) 2020.03.28
Union-find (disjoint set)  (0) 2020.03.15
N queen  (0) 2020.02.19