Cod sursa(job #1615567)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 26 februarie 2016 17:56:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
#include <time.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <bitset>
#include <queue>
#include <map>
#include <set>
#include <cmath>
#include <iomanip>
#define pb push_back
#define mp make_pair
#define sortvi(a) sort(a.begin(), a.end())
#define FOR(i, start, final) for (int i=start; i<=final; ++i)
#define ROF(i, start, final) for (int i=start; i>=final; --i)

#define NMAX 100005
#define inf (1 << 30)

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair < int, int> pi;
typedef vector< int > vi;
typedef vector< pair< int, int > > vpi;

ifstream f("bfs.in");
ofstream g("bfs.out");

int N, M, source, dist[NMAX];
vi Graph[NMAX];

void bfs(int source) {
    queue < int > Q;
    Q.push(source);
    dist[source] = 0;

    while (!Q.empty()) {
        int current = Q.front();
        Q.pop();
        for (auto it : Graph[current]) {
            if (dist[current] + 1 < dist[it]) {
                dist[it] = dist[current] + 1;
                Q.push(it);
            }
        }
    }
}

int main()
{
    f.sync_with_stdio(false);
    f>>N>>M>>source;
    FOR(i,1,M) {
        int x, y;
        f>>x>>y;
        Graph[x].pb(y);
    }

    FOR(i,1,N) {
        dist[i] = inf;
    }

    bfs(source);

    FOR(i,1,N) {
        if (dist[i] == inf) {
            g<< "-1 ";
        } else {
            g<< dist[i] << ' ';
        }
    }
    return 0;
}