Cod sursa(job #1564897)

Utilizator alexarnautuArnautu Alexandru alexarnautu Data 10 ianuarie 2016 00:23:33
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <vector>
#include <deque>
#include <bitset>

using namespace std;

FILE * iFile;
FILE * oFile;

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

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

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

	fscanf(iFile, "%d %d", &source, &destination);

	start = source;

	vertices[source].push_back(destination);

	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;

	que.push_back(start_node);
	answer.push_back(start_node);

	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) {
					visited[vertices[start_node][i]] = 1;
					answer.push_back(vertices[start_node][i]);
					que.push_back(vertices[start_node][i]); 
				}
			}
	}


}

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

	read();

	bfs(start);

	for(int i=0;i < answer.size(); i++)
		fprintf(oFile, "%d ", answer[i]);

	return 0;
}