Cod sursa(job #2202364)

Utilizator DordeDorde Matei Dorde Data 8 mai 2018 16:31:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int const NM = 1e5 + 7;
char const in [] = "bfs.in";
char const out [] = "bfs.out";
struct code
{
    int  x , y;
};
vector <int> v [NM];
queue <int> q;
bool mark [NM];
int dp [NM] , l , n , m;
void bfs()
{
    int i;
    q . push (l);
    mark [l] = 1;
    while(q . size ())
    {
        int a = q . front ();
        int sz = v [a] . size () ;
        mark [a] = 1;
        for(i = 0 ; i < sz ; ++ i)
            if(! mark [v [a][i]])
            {
                if(dp [v [a][i]] == -1)
                    dp [v [a][i]] = 0;
                dp [v [a][i]] = 1 + dp [a];
                q . push (v [a][i]);
                mark [v [a][i]] = 1;
            }
        q . pop ();
    }
    for(i = 1 ; i <= n ; ++ i)
        if(! dp [i] && i != l)
            dp [i] = -1;
}
ifstream f (in);
ofstream g (out);
int main()
{
    int i;
    f >> n >> m >> l;
    for(i = 1 ; i <= m ; ++ i)
    {
        int x , y;
        f >> x >> y;
        v [x] . push_back (y);
    }
    bfs ();
    for(i = 1 ; i <= n ; ++ i)
        g << dp [i] << " ";
    return 0;
}