Cod sursa(job #1098653)

Utilizator dropsdrop source drops Data 4 februarie 2014 23:27:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
/* Parcurgerea in latime - BFS */
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 100001
vector<int> Edge[MAX];
int N, M, S, D[MAX], C[MAX], P, U, X, Y;

void BFS()
{
    C[P = U = 1] = S;
    while (P <= U)
    {
        X = C[P++];
        for (int i = 0; i < Edge[X].size(); i++)
        {
            Y = Edge[X][i];
            if (Y == S) continue;
            if (D[Y] == 0)
            {
                D[Y] = D[X] + 1;
                C[++U] = Y;
            }
        }
    }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d", &N, &M, &S);
    for (int i = 1; i <= M; i++)
    {
        scanf("%d %d", &X, &Y);
        Edge[X].push_back(Y);
    }
    BFS();
    for (int i = 1; i <= N; i++)
    {
        if (i == S) printf("0 "); else printf("%d ", D[i] == 0 ? -1 : D[i]);
    }
}