Pagini recente » Borderou de evaluare (job #2772066) | Cod sursa (job #1398102) | Cod sursa (job #309447) | Cod sursa (job #51286) | Cod sursa (job #416600)
Cod sursa(job #416600)
#include <fstream>
#include <algorithm>
#define nmax 50002
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
struct nod { int inf; nod * next; } *a[nmax];
int n,m,viz[nmax],sol[nmax];
void citire ()
{
int x,y;
nod *vf;
f>>n>>m;
for (int i=1; i<=m; i++)
{
f>>x>>y;
vf=new nod;
vf->inf=y;
vf->next=a[x];
a[x]=vf;
}
f.close ();
}
void dfs (int i)
{
for (nod *p=a[i]; p; p=p->next)
if (!viz[p->inf])
dfs (p->inf);
sol[++sol[0]]=i;
viz[i]=1;
}
void sortare_topologica ()
{
for (int i=1; i<=n; i++)
if (!viz[i])
dfs(i);
reverse (sol+1,sol+sol[0]+1);
}
void afisare ()
{
for (int i=1; i<=n; i++)
g<<sol[i]<<" ";
g.close ();
}
int main ()
{
citire ();
sortare_topologica ();
afisare ();
return 0;
}