Cod sursa(job #2167125)

Utilizator vladvlad00Vlad Teodorescu vladvlad00 Data 13 martie 2018 20:17:43
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

struct nod
{
	int x;
	nod *urm;
};

typedef nod* lista;

void ins(lista &L, int x);
void BFS();

int n, m, start, dist[100005], uz[100005];
lista L[100005];

int main()
{
	int i, x, y;

	fin >> n >> m >> start;
	for (i = 1; i <= m; i++)
	{
		fin >> x >> y;
		ins(L[x], y);
	}
	BFS();
	for (i = 1; i <= n; i++)
	{
		if (dist[i])
			fout << dist[i] << ' ';
		else
		{
			if (i != start)
				fout << -1 << ' ';
			else fout << 0 << ' ';
		}
	}
	fout << '\n';
	return 0;
}

void ins(lista &L, int x)
{
	nod *p = new nod;

	p->x = x;
	p->urm = L;
	L = p;
}

void BFS()
{
	int in, sf, aux, C[100005];
	nod*p;

	in = sf = 0;
	C[sf++] = start;
	uz[start] = 1;
	while (in < sf)
	{
		aux = C[in++];
		p = L[aux];
		while (p)
		{
			if (!uz[p->x])
			{
				uz[p->x] = 1;
				C[sf++] = p->x;
				dist[p->x] = dist[aux] + 1;
			}
			p = p->urm;
		}
	}
}