Pagini recente » Cod sursa (job #2456593) | Cod sursa (job #307774) | Cod sursa (job #3191737) | Cod sursa (job #553694) | Cod sursa (job #2243759)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50000
#define MMAX 100000
int n, m, p, nr, vf[1 + 2 * MMAX], urm[1 + 2 * MMAX], lst[1 + NMAX], viz[1 + NMAX], s, x, succesori[1 + NMAX];
int st, dr;
int stiva[1 + NMAX];
int sol[1 + NMAX];
void adauga ( int x, int y ) {
++nr;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void bfs () {
viz[stiva[st]] = 1;
while ( st <= dr ) {
int varf = stiva[st];
int p = lst[varf];
while ( p != 0 ) {
int y = vf[p];
succesori[y]--;
if (succesori[y] == 0 && viz[y] == 0)
stiva[++dr] = y, viz[y] = 1;
p = urm[p];
}
sol[++x] = varf;
++st;
}
}
int main() {
FILE *fin = fopen ( "sortaret.in", "r" );
fscanf ( fin, "%d%d", &n, &m );
int i;
for ( i = 1; i <= m; ++i ) {
int x, y;
fscanf ( fin, "%d%d", &x, &y );
adauga ( x, y );
++succesori[y];
}
fclose ( fin );
st = 1;
for ( i = 1; i <= n; ++i ) {
if ( succesori[i] == 0 ) {
stiva[++dr] = i;
viz[i] = 1;
}
}
bfs();
FILE *fout = fopen ( "sortaret.out", "w" );
for ( i = 1; i <= n; ++i )
fprintf ( fout, "%d ", sol[i] );
fclose ( fout );
return 0;
}