Cod sursa(job #228469)

Utilizator Mishu91Andrei Misarca Mishu91 Data 7 decembrie 2008 12:47:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

#define MAX_N 100005

vector <int> V[MAX_N];
int N, M, S;
int D[MAX_N];

void citire()
{
    int x, y;
    scanf("%d %d %d",&N, &M, &S);

    for(int i = 1; i <= M; ++i)
    {
        scanf("%d %d",&x, &y);
        V[x]. push_back(y);
    }
}

void solve()
{
    memset(D,-1,sizeof D);

    queue <int> Q;
    D[S] = 0;
    Q.push(S);

    while(!Q.empty())
    {
        int i = Q.front();
        Q.pop();

        for(vector <int> ::iterator it = V[i].begin(); it != V[i].end(); ++it)
            if(D[*it] == -1)
            {
                D[*it] = D[i] + 1;
                Q.push(*it);
            }
    }
    for(int i = 1; i <= N; ++i)
        printf("%d ",D[i]);
}

int main()
{
    freopen("bfs.in","rt",stdin);
    freopen("bfs.out","wt",stdout);

    citire();
    solve();
}