Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1682777) | Cod sursa (job #2018772) | Cod sursa (job #1750252)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
typedef struct elem
{
int identifier;
struct elem* next;
} Elem;
void dfs(int, Elem**, queue<int>&);
int main()
{
ifstream fin;
fin.open("sortaret.in");
int N, M;
fin >> N >> M;
int* startNodes = new int[N + 1]();
Elem** adjencyList = new Elem*[N + 1]();
for (int i = 1; i <= M; i++)
{
int x, y;
fin >> x >> y;
Elem* newElem = new Elem();
newElem->identifier = y;
newElem->next = adjencyList[x];
adjencyList[x] = newElem;
startNodes[y] = 1;
}
fin.close();
queue<int> result;
for (int i = 1; i <= N; i++)
{
if (!startNodes[i])
{
dfs(i, adjencyList, result);
}
}
ofstream fout;
fout.open("sortaret.out");
while (!result.empty())
{
fout << result.front() << " ";
result.pop();
}
fout.close();
return 0;
}
void dfs(int i, Elem** adjencyList, queue<int>& result)
{
result.push(i);
Elem* currentElem = adjencyList[i];
while (currentElem)
{
dfs(currentElem->identifier, adjencyList, result);
currentElem = currentElem->next;
}
}