Cod sursa(job #1808316)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 17 noiembrie 2016 16:45:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

const int Nmax=100001;

vector<int>g[Nmax];
vector<int>viz; // componente conexe
vector<int>d;

int n;

void bfs( int nod, int cc )
{
    queue<int>q;

    int u,v,j;

    viz[nod]=cc;

    q.push(nod);

    while( !q.empty() )
    {
        u=q.front();
        q.pop();

        for( j=0;j<g[u].size();j++ )
            {
                v=g[u][j];

                if( !viz[v] )
                {
                    viz[v]=cc;
                    d[v]=d[u]+1;

                    q.push(v);
                }
            }
    }
}

int main()
{
    freopen( "bfs.in", "r", stdin );
    freopen( "bfs.out", "w", stdout );

    int m, s, u, v, i;

    scanf( "%d%d%d", &n, &m, &s );

    for( i=1;i<=m;i++ )
    {
        scanf( "%d%d", &u, &v );

        g[u].push_back(v);
    }

    viz.assign(n+1,0);
    d.assign(n+1,0);

    bfs(s,1);

    for( i=1;i<=n;i++ )
        if( viz[i]!=viz[s] )
            printf( "-1 " );
        else
            printf( "%d ", d[i] );

    return 0;
}