Cod sursa(job #1627782)

Utilizator filip.dutescuDutescu Filip Ioan filip.dutescu Data 3 martie 2016 18:46:16
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int N=100010;
int n, m, s, x, y, nr=0, poz, lst[N], vf[N*2], urm[N*2], d[N*2], q[N*2];

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

void bfs(int x0){
    int p=0, u=0;

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

    q[u++] = x0;
    d[x0] = 0;

    while(p < u){
        x = q[p++];
        poz = lst[x];

        while(poz != 0){
            y = vf[poz];

            if(d[y] == -1){
                d[y] = 1 + d[x];
                q[u++] = y;
            }

            poz = urm[poz];
        }
    }
}

int main()
{
    in>>n>>m>>s;
    for(int i=1; i <= m; i++){
        in>>x>>y;
        Adauga(x, y);
    }

    bfs(s);

    for(int i=1; i <= n; i++)
        out<<d[i]<<" ";
    return 0;
}