Cod sursa(job #276454)

Utilizator vladbBogolin Vlad vladb Data 11 martie 2009 10:29:13
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>

struct nod { int v;
	     nod *next;
	   } *v[100001];
long n,m,cost[100001],t[100001],s[100001],pus[100001],ss;

void citire()
{   long i,x,y;
    nod *nou;
    freopen("bfs.in","r",stdin);
    scanf("%ld%ld%ld",&n,&m,&ss);
    for(i=1;i<=m;i++)
    {	scanf("%ld%ld",&x,&y);
	nou=new nod;
	nou->v=y;
	nou->next=v[x];
	v[x]=nou;
    }
}

void bf(long nd)
{   long st=1,d=1,i;
    t[nd]=-1;
    s[d]=nd;
    pus[nd]=1;
    nod *p;
    while(st<=d)
    {	p=v[s[st]];
	    while(p!=NULL)
	    {       if(pus[p->v]==0)
			    {       pus[p->v]=1;
			  		    s[++d]=p->v;
         			    t[s[d]]=s[st];
			            cost[s[d]]=cost[t[s[d]]]+1;
		        }
		        p=p->next;
        }
        st++;
    }
    for(i=1;i<=n;i++)
    	if(t[i]==0) cost[i]=-1;
}

int main()
{   freopen("bfs.out","w",stdout);
    long i;
    nod *p;
    citire();
    bf(ss);
    for(i=1;i<=n;i++)
    	printf("%d ",cost[i]);
    return 0;
}