Cod sursa(job #1705540)

Utilizator greenroFlorin Calota greenro Data 20 mai 2016 19:11:39
Problema Sortare topologica Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.63 kb

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;

class Main {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader("sortaret.in"));
        String temp[] = in.readLine().split(" ");
        int N = Integer.parseInt(temp[0]);
        int M = Integer.parseInt(temp[1]);
        List<List<Integer>> g = new ArrayList<>();
        for (int i = 0; i <= N; i++) {
            g.add(i, new ArrayList<Integer>());
        }
        for (int i = 0; i < M; i++) {
            temp = in.readLine().split(" ");
            int x = Integer.parseInt(temp[0]);
            int y = Integer.parseInt(temp[1]);
            g.get(y).add(x);
        }
        vis = new int[N + 1];
        res = new PriorityQueue<Integer>();
        for (int i = 1; i <= N; i++) {
            if (vis[i] == 0) {
                dfs(i, g);
            }
        }
        PrintWriter out = new PrintWriter("sortaret.out");        
        while (!res.isEmpty()) {
            out.print(res.poll() + " ");
        }
        in.close();
        out.close();
    }

    static int[] vis;
    static Queue<Integer> res;

    static void dfs(int n, List<List<Integer>> g) {
        vis[n] = 1;
        for (Integer m : g.get(n)) {
            if (vis[m] == 0) {
                dfs(m, g);
            }
        }
        res.add(n);
    }
}