Cod sursa(job #1513841)

Utilizator mariusadamMarius Adam mariusadam Data 30 octombrie 2015 00:48:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <fstream>
#include <vector>
#include <queue>
#define pb push_back
#define N_MAX 100001

using namespace std;

vector <unsigned int> G[N_MAX];
bool viz[N_MAX];
int dist[N_MAX];

void bfs (int nod)
{
    queue <unsigned int> Q;
    Q.push(nod);
    viz[nod] = true;
    while (!Q.empty())
    {
        unsigned int prec = Q.front();
        Q.pop();
        for (int i=0; i < G[prec].size(); i++)
            if (!viz[G[prec][i]])
            {
                viz[G[prec][i]] = true;
                Q.push(G[prec][i]);
                dist[G[prec][i]] = dist[prec] + 1;
            }
    }
}

int main()
{
    ifstream r("bfs.in");
    ofstream w("bfs.out");
    int n, m, source, i, j;

    r >> n >> m >> source;
    for (int k = 0; k < m ; k++)
    {
        r >> i >> j;
        G[i].pb(j);
    }

    bfs(source);

    for (int i = 1; i <= n; i++)
        if (viz[i])
            w << dist[i]<< " ";
        else
            w << -1 << " ";
    r.close();
    w.close();
    return 0;
}