Cod sursa(job #2470050)

Utilizator ProBatmanBalint Leonard ProBatman Data 8 octombrie 2019 17:34:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

const int CMAX =1e5+15;

queue < int > Q;
vector < int > v[CMAX];

int n , m , S;
int arc1 , arc2 , drum[CMAX];
bool vizitat[CMAX] = {0};

void citire()
{
    fin >> n >> m >> S;
    for(int i=0;i<m;i++)
    {
        fin >> arc1 >> arc2;
        if(arc1!=arc2){
            v[arc1-1].push_back(arc2-1);
        }
    }
}

int bfs(int nod)
{
    Q.push(nod);
    vizitat[nod] = 1;
    while(!Q.empty())
    {
        for(int i=0;i<v[Q.front()].size();i++)
        {
            if(vizitat[v[Q.front()][i]]==0)
            {
                vizitat[v[Q.front()][i]] = 1;
                drum[v[Q.front()][i]] = drum[Q.front()] + 1;
                Q.push(v[Q.front()][i]);
            }
        }
        Q.pop();
    }
}

int main()
{
    citire();
    bfs(S-1);
    for(int i=0;i<n;i++)
    {
        if(S-1==i)fout << 0 << " ";
        else if(drum[i]==0)fout << -1 << " ";
        else fout << drum[i] << " ";
    }
    return 0;
}