Cod sursa(job #1935035)

Utilizator lucian666Vasilut Lucian lucian666 Data 21 martie 2017 23:00:24
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb


#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <utility>
#include <queue>
#include <bitset>
#include <cstring>
#include <cstdlib>

#define dim 100009
#define pb push_back
#define mp make_pair
#define inf 0x3f3f3f3f

using namespace std;
ofstream out("bfs.out");

int n,m,s,dist[dim];
vector <int > G[dim];
typedef vector<int>::iterator IT;
queue < int > Q;
bitset<dim> uz;


void read();
void bfs(int source);
void wrt();

int main()
{
    read();
    bfs(s);
    wrt();

    return 0;
}

void read()
{
    ifstream in("bfs.in");

    in >> n >> m >> s;
    for(int x,y;m;--m)
    {
        in >> x >> y;
        G[x].pb(y);
    }
}

void bfs(int source)
{
    memset(dist,inf,sizeof(dist));
    dist[source] = 0;
    uz[source] = 1;
    Q.push(source);

    while(!Q.empty())
    {
        int nod = Q.front();
        Q.pop();
        for(IT i = G[nod].begin(); i!=G[nod].end(); ++i)
        {
            if(!uz[*i])
            {
                dist[*i] = dist[nod] + 1;
                uz[*i] = 1;
                Q.push(*i);
            }
        }
    }
}

void wrt()
{
    for(int i = 1; i<=n; ++i)
    {
        if(dist[i] == inf)
        {
            out << -1 << " ";
            continue;
        }


        out << dist[i] << " ";
    }
}