Cod sursa(job #345260)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 2 septembrie 2009 13:20:36
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>

FILE *fin=fopen("bfs.in","r"),
    *fout=fopen("bfs.out","w");

int N,M,S,d[100010];

struct nod {int inf;nod* next;};
typedef nod* lista;
lista L[100010];

char viz[100010];
lista Q,Qf;

void bfs()
{
	Q=Qf=new nod;
	Q->inf=S;Q->next=NULL;
	viz[S]=1;d[S]=1;
	while(Q)
	{
		int crt=Q->inf;
		for(lista p=L[crt];p;p=p->next)
			if(viz[p->inf]==0)
			{
				d[p->inf]=d[crt]+1;
				Qf->next=new nod;Qf=Qf->next;
				Qf->inf=p->inf;Qf->next=NULL;
				viz[p->inf]=1;
			}
		lista aux=Q;
		Q=Q->next;
		delete aux;
	}
}

int main()
{
    fscanf(fin,"%d %d %d",&N,&M,&S);
    for(int i=1;i<=M;i++)
    {
		int x,y;
		fscanf(fin,"%d %d",&x,&y);
		lista aux=new nod;
		aux->inf=y;
		aux->next=L[x];
		L[x]=aux;
    }
    bfs();
    for(int i=1;i<=N;i++)
		fprintf(fout,"%d ",d[i]-1);
    return 0;
}