Cod sursa(job #2040389)

Utilizator stefanst77Luca Stefan Ioan stefanst77 Data 15 octombrie 2017 19:04:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define Lung 100007

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

int n, m, s;
int drum[Lung];
int  viz[Lung];
vector <int> L[Lung];
queue <int> q;

void Citire()
{
    int i, x, y;
    fin >> n >> m >> s;
    for (i=1; i<=m; i++)
    {
        fin >> x >> y;
        L[x].push_back(y);
    }
}

void Bfs(int nod)
{
    vector<int>::iterator it;
    int p;
    q.push(nod);
    viz[nod]=1;
    drum[nod]=0;

    while (!q.empty())
    {
        p=q.front();
        q.pop();
        for (it = L[p].begin(); it != L[p].end(); it++)
            if (viz[*it]==0)
            {
                q.push(*it);
                viz[*it]=1;
                drum[*it]=drum[p]+1;
            }
    }
}

void Afisare()
{
    for (int i=1; i<=n; i++)
        if (drum[i]) fout << drum[i] << " ";
        else
        {
            if (i!=s) fout << "-1 ";
            else fout << "0 ";
        }
}

int main()
{
    Citire();
    Bfs(s);
    Afisare();
    fin.close();
    fout.close();
    return 0;
}