Pagini recente » Cod sursa (job #1625620) | Cod sursa (job #2334155) | Cod sursa (job #168318) | Cod sursa (job #1174730) | Cod sursa (job #1808101)
#include <stdio.h>
#include <list>
#include <vector>
#include <queue>
using namespace std;
int main()
{
int n, m, x, y;
FILE *fin = fopen("sortaret.in", "r");
FILE *fout = fopen("sortaret.out", "w");
fscanf(fin, "%d%d", &n, &m);
vector<int> number_in_edges(n + 1, 0);
vector<list<int>> graph(n + 1);
for(int i = 1; i <= m; i++) {
fscanf(fin, "%d%d", &x, &y);
graph[x].push_back(y);
number_in_edges[y]++;
}
list<int> sorted_elements;
queue<int> no_in_edges;
for(int i = 1; i <= m; i++) {
if(number_in_edges[i] == 0)
no_in_edges.push(i);
}
list<int>::iterator neighbors_iterator;
/*while(!no_in_edges.empty()) {
int taken_vertex = no_in_edges.front();
no_in_edges.pop();
sorted_elements.push_back(taken_vertex);
for(neighbors_iterator = graph[taken_vertex].begin();
neighbors_iterator != graph[taken_vertex].end(); ++neighbors_iterator) {
int vertex = *neighbors_iterator;
//neighbors_iterator = graph[taken_vertex].erase(neighbors_iterator);
number_in_edges[vertex]--;
if(number_in_edges[vertex] == 0)
no_in_edges.push(vertex);
}
}*/
for(neighbors_iterator = sorted_elements.begin();
neighbors_iterator != sorted_elements.end(); ++neighbors_iterator) {
fprintf(fout, "%d ", *neighbors_iterator);
}
fclose(fin);
fclose(fout);
return 0;
}