Cod sursa(job #276217)

Utilizator vladbBogolin Vlad vladb Data 10 martie 2009 22:57:04
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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 d=1,i;
    t[nd]=-1;
    s[d]=nd;
    pus[nd]=1;
    nod *p;
    for(i=1;i<=n;i++)
    {	p=v[i];
	while(p!=NULL)
	{       if(pus[p->v]==0)
		{       pus[p->v]=1;
			s[++d]=p->v;
			t[s[d]]=i;
			cost[s[d]]=cost[t[s[d]]]+1;
		}
		p=p->next;
	}
    }
    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;
}