Cod sursa(job #473439)

Utilizator robigiirimias robert robigi Data 29 iulie 2010 14:05:02
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
// Parcurgere in latime.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "stdio.h"

FILE *f=fopen("bfs.in", "r");
FILE *g=fopen("bfs.out", "w");

typedef struct nod
{
	int x;
	struct nod * adr;
};

nod *l[100001];

int n, m, s;
int c[100001], viz[100001], sol[100001];
int sum[100001];


void add(int x, int y)
{
	nod *p=new nod;
	p->x=y;
	p->adr=l[x];
	l[x]=p;
}


void read()
{
	fscanf(f, "%d%d%d", &n, &m, &s);
	for (int i=1; i<=m; ++i)
	{
		int x, y;
		fscanf(f, "%d%d", &x, &y);
		add(x, y);
	}
	c[1]=s;
}



void program()
{
	int i=1;
	int j=1;
	while (i<=j)
	{
		int cr=c[i];
		viz[cr]=1;
		sol[cr]=sum[i];
		nod *p=l[cr];
		while (p!=NULL)
		{
			if (!viz[p->x])
			{
				c[++j]=p->x;
				sum[j]=sum[i]+1;
			}
			p=p->adr;
		}
		while (viz[c[i]]) ++i;
	}

	for (int k=1; k<=n; ++k)
		if (sol[k]!=0)
			fprintf(g, "%d ", sol[k]);
		else
			if (k!=s) fprintf(g, "-1 ");
			else
				fprintf(g, "0 ");
}


int main()
{
	read();
	program();
	return 0;
}