Cod sursa(job #949851)

Utilizator acomAndrei Comaneci acom Data 15 mai 2013 10:28:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
#define NMAX 1000005
queue <int> q;
vector <int> G[NMAX];
int n,m,s,x,y,Nr[NMAX/10+5];
void citire()
{
    int i;
    scanf("%d%d%d",&n,&m,&s);
    for (i=1;i<=m;++i)
        scanf("%d%d",&x,&y), G[x].push_back(y);
}
void bfs(int S)
{
    int i;
    q.push(S);
    Nr[S]=1;
    while (!q.empty())
        {
            x=q.front(); q.pop();
            for (i=0;i<G[x].size();++i)
                {
                    y=G[x][i];
                    if (!Nr[y] || Nr[y]>Nr[x]+1)
                        {
                            q.push(y);
                            Nr[y]=Nr[x]+1;
                        }
                }
        }
}
int main()
{
    int i;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    citire();
    bfs(s);
    for (i=1;i<=n;++i)
        printf("%d ",Nr[i]-1);
    printf("\n");
    return 0;
}