Cod sursa(job #276446)

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

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

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

void bf(int nd)
{   int 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);
    int i;
    nod *p;
    citire();
    bf(ss);
    for(i=1;i<=n;i++)
    	printf("%d ",cost[i]);
    return 0;
}