Cod sursa(job #2252682)

Utilizator jason2013Andronache Riccardo jason2013 Data 2 octombrie 2018 22:31:50
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include<bits/stdc++.h>

using namespace std;

const int N_MAX = 100005;

vector <int> G[N_MAX];
int distance_arr[N_MAX], currentDistance = 1;
bool visited[N_MAX];

void bfs(int N, int M, int startVertex)
{
    queue <int> bfsQueue;
    int visCount = 0;

    distance_arr[startVertex] = 0;
    visited[startVertex] = true;
    bfsQueue.push(startVertex);

    while(!bfsQueue.empty())
    {
        bool at_least_one_visited = false;
        int currentNode = bfsQueue.front();
        bfsQueue.pop();
        for(int i = 0; i < G[currentNode].size(); i ++)
            if( !visited[G[currentNode][i]] )
            {
                visited[G[currentNode][i]] = true;
                bfsQueue.push(G[currentNode][i]);

                if( G[currentNode][i] != startVertex ){
                    distance_arr[G[currentNode][i]] = currentDistance;
                    at_least_one_visited = true;
                }
            }
        if( at_least_one_visited == true ){
            currentDistance ++;
            at_least_one_visited = false;
        }
        visCount ++;
    }

}

int main()
{
    ifstream fin("bfs.in");
    ofstream fout("bfs.out");

    int N, M, startVertex;

    fin >> N >> M >> startVertex;
    for(int i = 1; i <= M; i ++)
    {
        int x, y;
        fin >> x >> y;
        G[x].push_back(y);
    }

    bfs(N, M, startVertex);

    for(int i = 1; i <= N; i ++)
        if( visited[i] == 0 )
            distance_arr[i] = -1;
    for(int i = 1 ; i <= N; i ++)
        fout << distance_arr[i] <<" ";

    fin.close();
    fout.close();
    return 0;
}