Cod sursa(job #2028541)

Utilizator rangal3Tudor Anastasiei rangal3 Data 28 septembrie 2017 00:10:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>
#include <queue>
#define in "bfs.in"
#define out "bfs.out"
#define N 100003
using namespace std;

ifstream fin(in);
ofstream fout(out);

int n,m,k,x,y;

vector<int> v[N];
queue<int> coada;

bool f[N];
int l[N];


void BFS()
{
    f[k] = 1;
    l[k] = 0;
    coada.push(k);

    vector<int>::iterator it;

    while(!coada.empty())
    {
        int ln = l[coada.front()];
        for(it = v[coada.front()].begin(); it != v[coada.front()].end(); ++it)
        if(!f[*it])
            {
                const int nod = *it;
                f[nod] = 1;
                coada.push(nod);
                l[nod] = ln + 1;
            }

        coada.pop();
    }
}

int main()
{
    fin>>n>>m>>k;

    for(int i=1; i<=n; ++i)
        l[i] = -1;

    while(m--)
    {
        fin>>x>>y;
        v[x].push_back(y);
    }

    BFS();

    for(int i=1; i<=n; ++i)
        fout<<l[i]<<" ";

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