Cod sursa(job #1691964)

Utilizator andreilucaLuca Andrei andreiluca Data 19 aprilie 2016 21:30:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <queue>
#define NMAX 100002

using namespace std;
FILE *in, *out;
vector<int> v[NMAX];
int level[NMAX];
int n, m, start;
void read();
void BFS(int);
int main()
{
	in = fopen("bfs.in", "r");
	out = fopen("bfs.out", "w");
	read();
	for (int i = 0; i < NMAX; i++)
		level[i] = -1;
	BFS(start);
	for (int i = 1; i <= n; i++)
		fprintf(out,"%d ", level[i]);
	return 0;
}
void read()
{
	int x, y;
	fscanf(in, "%d%d%d", &n, &m, &start);
	for (int i = 0; i < m; i++)
	{
		fscanf(in, "%d%d", &x, &y);
		v[x].push_back(y);
	}
}
void BFS(int s)
{
	queue<int> q;
	int x;
	level[s] = 0;
	q.push(s);
	while (!q.empty())
	{
		x = q.front();
		q.pop();
		for (int i = 0; i < v[x].size(); i++)
		{
			if (level[v[x][i]] == -1)
			{
				level[v[x][i]] = level[x] + 1;
				q.push(v[x][i]);
			}
		}
	}
}