Cod sursa(job #797289)

Utilizator bogfodorBogdan Fodor bogfodor Data 13 octombrie 2012 18:30:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <cstring>

using namespace std;

FILE *fin=freopen("bfs.in","r",stdin);
FILE *fout=freopen("bfs.out","w",stdout);

int n,m,s;

struct nod
{
    int inf;
    nod *urm;
}*a[100005];

void add(nod *&q, int inf)
{
    nod *p= new nod;
    p->inf=inf;
    p->urm=q;
    q=p;
}

int u;
int viz[100005];
int c[100005];

void citire()
{
    scanf("%d %d %d\n",&n,&m,&s);
    int x,y;
    for(int i=0;i<m;i++)
    {
        scanf("%d %d",&x,&y);
        add(a[x],y);
    }
}

void bfs()
{
    int cost = 0;
    viz[s]=0;
    c[u++]=s;
    for(int po=0;po<=u;po++){
        cost++;
        for(nod *i=a[c[po]];i;i=i->urm)
        {
            if(viz[i->inf]==-1)
            {
                c[u++]=i->inf;
                viz[i->inf]=1+viz[c[po]];
            }
        }
    }
}


int main()
{
    citire();
    u=0;
    memset(viz,-1,sizeof(viz));
    bfs();
    for(int i=1;i<=n;i++)
        printf("%d ",viz[i]);
    printf("\n");
    return 0;
}