Skip to content

Breadth First Search

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int num_vertices;     // number of vertices
int num_edges;      // number of edges
vi adj_list[num_vertices];     // adjacency list
vi dist(num_vertices, -1);     // array storing distances to each vertex

void add_edge(int from, int to){
    adj_list[from].pb(to);
}

void BFS(int source){

    vb visited(num_vertices, false);
    queue<int> q;
    q.push(source);
    visited[source] = true;
    dist[source] = 0;

    while(q.size()){
        int cur_vertex = q.front();
        vi cur_vertex_adj = adj_list[cur_vertex];
        FOR(i, cur_vertex_adj.size()){
            int adj_vertex = cur_vertex_adj[i];
            if(visited[adj_vertex] == false){
                visited[adj_vertex] = true;
                dist[adj_vertex] = dist[cur_vertex] + 1;
                q.push(adj_vertex);
            }
        }
        q.pop();
    }
}