Cod sursa(job #1778904)

Utilizator RaduToporanRadu Toporan RaduToporan Data 14 octombrie 2016 13:19:24
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <queue>

using namespace std;
struct nod
{
    int info;
    nod *urm;
};
nod *v[100005];
int n,m,x,y,s,i,d[100005];
bool viz[100005];
queue <int> q;

void bfs(int s)
{
    int x;
    q.push(s);
    viz[s]=1;
    d[s]=0;
    while (!q.empty())
    {
        x=q.front();
        q.pop();
        for (nod *ult=v[x]; ult!=NULL; ult=ult->urm)
            if (viz[ult->info]==0)
        {
            q.push(ult->info);
            viz[ult->info]=1;
            d[ult->info]=d[x]+1;
        }
    }
}


int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d%d%d",&n,&m,&s);
    for (i=1; i<=m; i++)
    {
        scanf("%d%d",&x,&y);
        nod *p=new nod;
        p->info=y;
        p->urm=v[x];
        v[x]=p;
    }
    bfs(s);
    for (i=1; i<=n; i++)
        if (i!=s && d[i]==0)
            printf("-1 "); else printf("%d ",d[i]);
    return 0;
}