Cod sursa(job #1041973)

Utilizator arch_enemyAngela Gossow arch_enemy Data 26 noiembrie 2013 13:47:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

#define NMAX 100001
#define node first
#define dist second

using namespace std;

int N, M, S, i, node1, node2    ;
int Min[NMAX];
vector<int> G[NMAX];
vector<int>::iterator adjNode;
bool Used[NMAX];
queue< pair<int, int> > Q;

inline void BFS() {
    pair<int,int> current = Q.front();
    Q.pop();

    Min[current.node] = current.dist;
    for(adjNode = G[current.node].begin(); adjNode != G[current.node].end(); ++adjNode)
        if(!Used[*adjNode]) {
            Used[*adjNode] = true;
            Q.push(make_pair(*adjNode, current.dist + 1));
        }
}

int main() {
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    scanf("%d%d%d", &N, &M, &S);
    while(M--) {
        scanf("%d%d", &node1, &node2);
        G[node1].push_back(node2);
    }
    for(i = 1; i <= N; ++i)
        Min[i] = -1;

    memset(Used, false, sizeof(Used));
    Q.push(make_pair(S, 0));
    Used[S] = true;

    while(!Q.empty())
        BFS();
    for(i = 1; i <= N; ++i)
        printf("%d ", Min[i]);

    return 0;
}