Cod sursa(job #1564547)

Utilizator TopiAlexTopala Alexandru TopiAlex Data 9 ianuarie 2016 19:08:07
Problema Sortare topologica Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#define N_MAX 100
#define M_MAX N_MAX * (N_MAX - 1)

FILE *f, *g;
int n, m;
int lists[N_MAX][N_MAX];
bool viz[N_MAX];
int nods[N_MAX];
int ind;

void citire();
void DFS(int);

int main()
{
    citire();

    for (int i = 1; i <= n; ++i){
        if (!viz[i])
            DFS(i);
    }

    for (int i = n; i > 0; --i){
        fprintf(g, "%d ", nods[i]);
    }

    fprintf(g, "\n");

    fclose(f);
    fclose(g);
    return 0;
}

void citire(){
    f = fopen("sortaret.in", "r");
    g = fopen("sortaret.out", "w");

    int x, y;
    fscanf(f, "%d %d\n", &n, &m);

    for (int i = 1; i <= m; ++i){
        fscanf(f, "%d %d\n", &x, &y);
        lists[x][++lists[x][0]] = y;
    }
}

void DFS(int k){
    viz[k] = true;
    for (int i = 1; i <= lists[k][0]; ++i){
        if (!viz[lists[k][i]]){
            DFS(lists[k][i]);
        }
    }
    nods[++ind] = k;
}