Cod sursa(job #974783)

Utilizator gabriel93Robu Gabriel gabriel93 Data 18 iulie 2013 12:50:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#define Nmax 100002
using namespace std;
int n,m,s;
int viz[Nmax];

struct graf
{
    int v;
    graf *adr;
};
graf *g[Nmax];

void add(int v1,int v2)
{
    graf *p;
    p=new graf;
    p->v=v2;
    p->adr=g[v1];
    g[v1]=p;
}

void citire()
{
    int i,v1,v2;
    scanf("%d %d %d",&n,&m,&s);
    for(i=1;i<=m;++i)
    {
        scanf("%d %d",&v1,&v2);
        add(v1,v2);
    }
}

void bfs()
{
    int cd[Nmax],p,u;
    graf *q;
    viz[s]=1;
    cd[1]=s;
    p=1;
    u=1;
    while(p<=u)
    {
        for(q=g[cd[p]];q;q=q->adr)
            if(viz[q->v]==0)
            {
                viz[q->v]=viz[cd[p]]+1;
                ++u;
                cd[u]=q->v;
            }
        ++p;
    }
}

void scrie()
{
    int i;
    for(i=1;i<=n;++i)
            printf("%d ",viz[i]-1);
}

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