Cod sursa(job #1757751)

Utilizator dodecagondode cagon dodecagon Data 15 septembrie 2016 19:17:44
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct list
{
	int x;
	list * next;
} list;

list * g[100009],*p;

int n,m,t[100009],ul,pr,sol[100009],s,x,y;
char use[100009];

void add(list ** l,int x)
{
   p=(list *)malloc(sizeof(list));
   p->x=x;
   p->next=*l;
   *l=p;
}

int main(int argc, char const *argv[])
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
    

    scanf("%d%d%d",&n,&m,&s);

    while (m--)
    {
    	scanf("%d%d",&x,&y);
    	add(&g[x],y);
    }

    t[0]=s;
    use[s]=1;


    while (pr<=ul)
    {
    	
    	for (p=g[t[pr++]]; p ;p=p->next)
            if (use[p->x]==0)
            {
            	use[p->x]=1;
            	t[++ul]=p->x;
            	sol[p->x]=sol[t[pr-1]]+1;
            }

        
    }

    

   for (int i=1;i<=n;++i)
   	if (use[i]==0)
   		printf("-1 "); else 
   	     printf("%d ",sol[i]);

	return 0;
}