Cod sursa(job #2509510)

Utilizator kodama cheama alex koda Data 14 decembrie 2019 12:05:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;


const int N = 100001;
const int M = 1000001;
int lst[N], vf[2*M], urm[2*M], n, nr, d[N] = {-1}, q[N];

void adauga (int x, int y) {
    vf[++nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

void bfs (int x) {
    int st, dr;
    for (int i = 1; i <= n; i++ )
        d[i] = -1;
    st = 0;
    dr = -1;
    q[++dr] = x;
    d[x] = 0;
    while ( st <= dr ) {
        int x = q[st++];
        for ( int p = lst[x]; p; p = urm[p] ) {
            int y = vf[p];
            if ( d[y] == -1 ) {
                q[++dr] = y;
                d[y] = 1 + d[x];
            }
        }
    }
}

int main () {
    ifstream fin ("bfs.in");
    ofstream fout ("bfs.out");
    int m, s, x, y;
    fin>>n>>m>>s;

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

    for ( int i = 0; i < m; i++ ) {
        fin>>x>>y;
        adauga(x,y);
    }
    bfs(s);

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

    return 0;
}