Cod sursa(job #488443)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 28 septembrie 2010 19:35:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <stdio.h>
#include <queue>
#include <list>
#define MAX 100001

using namespace std;

int M, N, S;
list <int> G[MAX];

void citire()
{
    int a, b;
    scanf("%d %d %d",&N,&M,&S);
    for(int i = 1; i <= M; i++)
    {
        scanf("%d %d",&a,&b);
        G[a].push_back(b);
    }
}

int D[MAX];

void solve()
{
    queue<int> Q;
    list<int>::iterator p;
    int t;
    Q.push(S);
    D[S] = 1;
    while(!Q.empty())
    {
        t = Q.front();
        p = G[t].begin();
        while(p != G[t].end())
        {
            if(!D[*p])
            {
                D[*p] = D[t] + 1;
                Q.push(*p);
            }
            p++;
        }
        Q.pop();
    }
}

void ecrire()
{
    for(int i = 1; i <= N; i++)
        printf("%d ", D[i]-1);

}

int main()
{
    freopen ("bfs.in","r",stdin);
    freopen ("bfs.out","w",stdout);
    citire();
    solve();
    ecrire();
    return 0;
}