Cod sursa(job #1781782)

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

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

void citire()
{
    int i,x,y;
    scanf("%d%d%d",&n,&m,&s);
    for (i=1; i<=m; i++)
    {
        scanf("%d%d",&x,&y);
        nod *elem=new nod;
        elem->info=y;
        elem->urm=v[x];
        v[x]=elem;
    }
}

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

void afisare()
{
    int i;
    for (i=1; i<=n; i++)
        if (d[i]==0) printf("-1 ");  else printf("%d ",d[i]-1);
    printf("\n");
}

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