Cod sursa(job #1705683)

Utilizator catcatCatalina catcat Data 20 mai 2016 21:50:23
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>
#include <string.h>
#include <vector>
#include <stack>

#define MAX_NODES 100000

std::vector<int> adj_list[MAX_NODES + 1];
std::stack<int> s;
int d[MAX_NODES + 1];
int f[MAX_NODES + 1];
int timp;

void explore(int curr_node, int visited[]) {
    visited[curr_node] = 1;
    d[curr_node] = timp++;
    
    for (auto &adj_node : adj_list[curr_node]) {
        if (!visited[adj_node]) {
            explore(adj_node, visited);
        }
    }
    
    f[curr_node] = timp++;
    s.push(curr_node);
}
void dfs(int num_nodes, int visited[]) {
    int cc = 0;
    
    for (int i = 1; i <= num_nodes; i++) {
        visited[i] = 0;
    }
    
    for (int i = 1; i <= num_nodes; i++) {
        if (!visited[i]) {
            explore(i, visited);
        }
    }
    
}

int main(void) {
    FILE * fin = fopen("sortaret.in", "r");
    FILE * fout = fopen("sortaret.out", "w");
    
    int n, m, x, y;
    
    fscanf(fin, "%d%d", &n, &m);
    int visited[n + 1];
    
    for (int i = 0; i < m; i++) {
        fscanf(fin, "%d%d", &x, &y);
        adj_list[x].push_back(y);
        adj_list[y].push_back(x);
    }
    
    dfs(n, visited);
    while (!s.empty()) {
        fprintf(fout, "%d ", s.top());
        s.pop();
    }   
    
    fclose(fin);
    fclose(fout);
}