Cod sursa(job #632221)

Utilizator Viva12Ferentz Sergiu Viva12 Data 10 noiembrie 2011 16:50:11
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <cstdio>
#define N 100000
using namespace std;
int n,m,s;
struct nod
{
    int inf;
    nod *urm;
}*l[N];
void add(int x,nod *&p)
{
    nod *q=new nod;
    q->inf=x;
    q->urm=p;
    p=q;
}
void read()
{   int x,y;
    scanf("%d %d %d",&n,&m,&s);
        for(int i=1;i<m;i++)
            {
                scanf("%d %d",&x,&y);
                add(y,l[x]);
            }

}
struct c
{
    int val;
    int cost;
}coada[2*N];
int viz[N];
void bfs()
{
    int st=1;
    int fn=1;
    coada[fn++].val=s;
    viz[s]=1;
        for(int i=1;i<=fn;i++)
            {
                for(nod *j=l[coada[i].val];j;j=j->urm)
                    {
                        if(!viz[j->inf])
                            {
                                coada[fn].val=j->inf;
                                coada[fn++].cost=coada[i].cost+1;
                                viz[j->inf]=1;
                            }
                    }
                st++;
            }
}
void afis()
{
    for(int i=1;i<=n;i++)
        {   int ok=0;
            for(int j=1;j<=n;j++)
            {
                if(coada[j].val==i)
                    {printf("%d ",coada[j].cost);
                     ok=1;
                    break;
                    }
            }
            if (ok==0)
                {
                    printf("-1 ");
                }
        }
}
int main()
{   freopen("bfs.in","r",stdin);
    freopen("bfs.out", "w",stdout);
    read();
    bfs();
    afis();
    return 0;
}