Cod sursa(job #1564871)

Utilizator alexarnautuArnautu Alexandru alexarnautu Data 10 ianuarie 2016 00:04:35
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <vector>
#include <deque>
#include <bitset>

using namespace std;

FILE * iFile;
FILE * oFile;

int nodes, edges, nodeS;
int distance_custom[100002];
bitset<100002> visited;
vector <int> vertices[100002];
deque <int> que;

void read()
{
	int i, source, destination;

	fscanf(iFile, "%d %d %d", &nodes, &edges, &nodeS);

	for(i = 1; i <= edges; i++)
	{
		fscanf(iFile, "%d %d", &source, &destination);

		vertices[source].push_back(destination);
	}
}

void bfs(int start_node)
{
	int dist = 1, curr=0;

	que.push_back(start_node);
	distance_custom[start_node] = dist;
		
	while(que.size() > 0)
	{
			start_node = que.front();
			que.pop_front();
			visited[start_node] = 1;

			for(int i = 0; i < vertices[start_node].size(); i++)
			{
				if(visited[vertices[start_node][i]] == 0) {
					distance_custom[vertices[start_node][i]] = distance_custom[start_node] + 1;
					visited[vertices[start_node][i]] = 1;
					que.push_back(vertices[start_node][i]); 
				}
			}
	}


}

int main()
{
	iFile = fopen("bfs.in", "r");
	oFile = fopen("bfs.out", "w");

	read();

	bfs(nodeS);

	for(int i=1;i <= nodes; i++)
		fprintf(oFile, "%d ", distance_custom[i]-1);

	return 0;
}