Pagini recente » Cod sursa (job #2313408) | Cod sursa (job #2342587) | Cod sursa (job #2312891) | Cod sursa (job #2460472) | Cod sursa (job #1841632)
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
struct Node
{
bool visited = false;
vector<int> neighbours;
};
using Graph = vector<Node>;
void DFS(Graph &g, int node, vector<int> &order)
{
g[node].visited = true;
for (int n : g[node].neighbours)
if (!g[n].visited)
DFS(g, n, order);
order.push_back(node + 1);
}
vector<int> TopoSort(Graph &g)
{
vector<int> order;
for (unsigned i = 0; i < g.size(); ++i)
if (!g[i].visited)
DFS(g, i, order);
reverse(order.begin(), order.end());
return order;
}
int main()
{
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
int n, m;
fin >> n >> m;
Graph graph(n);
while (m--) {
int x, y;
fin >> x >> y;
graph[x - 1].neighbours.push_back(y - 1);
}
auto topo = TopoSort(graph);
for (int node : topo)
fout << node << " ";
fout << "\n";
return 0;
}