Cod sursa(job #1181148)

Utilizator flore77Simion Florentin flore77 Data 1 mai 2014 22:22:02
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <stdlib.h>
using namespace std;

/* dfs - componente conexe */

int main() {
    ifstream in;
    in.open("sortaret.in");
    ofstream out;
    out.open("sortaret.out");
    int N, M, i, nod, n1, n2, vecin, k = 0;
    in >> N >> M;
    vector<int> graf[N + 1];
    int *sortat = (int*)calloc(N + 1, sizeof(int));
    int *visited = (int*)calloc(N + 1, sizeof(int));
    vector<int>::iterator it;
    stack<int> s;
    for (i = 0; i < M; i++) {
        in >> n1 >> n2;
        if (n1 != n2) {
            graf[n1].push_back(n2);
            graf[n2].push_back(n1);
        }
    }
    for (i = 1; i <= N; i++) {
        if (visited[i] == 0) {
            visited[i] = 1;
            s.push(i);
            while (!s.empty()) {
                nod = s.top();
                vecin = -1;
                for (it = graf[nod].begin(); it != graf[nod].end(); it++) {
                    if (visited[*it] == 0) {
                        vecin = *it;
                        break;
                    }
                }
                if (vecin != -1) { // daca exista vecin
                    visited[vecin] = 1;
                    s.push(vecin);
                }
                else {
                    visited[nod] = -1;
                    sortat[k] = nod;
                    k++;
                    s.pop();
                }
            }
        }
    }
    //out << contor;
    for (i = 1; i <= N; i++)
        out << sortat[i] << " ";
    in.close();
    out.close();
    return 0;
}