From 96ce1285d59888cf9ddb66caadf40881c37cbbce Mon Sep 17 00:00:00 2001 From: Anam Khan Date: Fri, 2 Oct 2020 00:28:02 +0530 Subject: [PATCH 1/2] added topological sort --- TopologicalSort.java | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 TopologicalSort.java diff --git a/TopologicalSort.java b/TopologicalSort.java new file mode 100644 index 0000000..c8de187 --- /dev/null +++ b/TopologicalSort.java @@ -0,0 +1,83 @@ +import java.lang.*; +import java.io.*; +import java.util.*; + +class TopologicalSort { + public static void main(String[] args) throws IOException { + BufferedReader read = + new BufferedReader(new InputStreamReader(System.in)); + int t = Integer.parseInt(read.readLine()); + + while (t-- > 0) { + ArrayList> list = new ArrayList<>(); + String st[] = read.readLine().trim().split("\\s+"); + int edg = Integer.parseInt(st[0]); + int nov = Integer.parseInt(st[1]); + + for (int i = 0; i < nov + 1; i++) + list.add(i, new ArrayList()); + + String s[] = read.readLine().trim().split("\\s+"); + int p = 0; + for (int i = 1; i <= edg; i++) { + int u = Integer.parseInt(s[p++]); + int v = Integer.parseInt(s[p++]); + list.get(u).add(v); + } + + int[] res = new TopologicalSortUtil().topoSort(list, nov); + + if (check(list, nov, res) == true) + System.out.println("1"); + else + System.out.println("0"); + } + } + static boolean check(ArrayList> list, int V, int[] res) { + int[] map = new int[V]; + for (int i = 0; i < V; i++) { + map[res[i]] = i; + } + for (int i = 0; i < V; i++) { + for (int v : list.get(i)) { + if (map[i] > map[v]) return false; + } + } + return true; + } +} + +class TopologicalSortUtil { + static int[] topoSort(ArrayList> adj, int N) { + int[] indegree = new int[N]; + for(int i=0; i temp = adj.get(i); + for(int node : temp) { + indegree[node]++; + } + } + Queue q = new LinkedList<>(); + for(int i=0; i result = new ArrayList<>(); + while(!q.isEmpty()) { + int u = q.poll(); + result.add(u); + for(int node : adj.get(u)) { + if(--indegree[node] == 0) { + q.add(node); + } + } + visited++; + } + int[] arr = new int[result.size()]; + for(int i=0; i Date: Thu, 1 Oct 2020 18:59:31 +0000 Subject: [PATCH 2/2] Restyled by clang-format --- TopologicalSort.java | 132 +++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/TopologicalSort.java b/TopologicalSort.java index c8de187..e313aad 100644 --- a/TopologicalSort.java +++ b/TopologicalSort.java @@ -1,83 +1,83 @@ -import java.lang.*; import java.io.*; +import java.lang.*; import java.util.*; class TopologicalSort { - public static void main(String[] args) throws IOException { - BufferedReader read = - new BufferedReader(new InputStreamReader(System.in)); - int t = Integer.parseInt(read.readLine()); + public static void main(String[] args) throws IOException { + BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); + int t = Integer.parseInt(read.readLine()); - while (t-- > 0) { - ArrayList> list = new ArrayList<>(); - String st[] = read.readLine().trim().split("\\s+"); - int edg = Integer.parseInt(st[0]); - int nov = Integer.parseInt(st[1]); + while (t-- > 0) { + ArrayList> list = new ArrayList<>(); + String st[] = read.readLine().trim().split("\\s+"); + int edg = Integer.parseInt(st[0]); + int nov = Integer.parseInt(st[1]); - for (int i = 0; i < nov + 1; i++) - list.add(i, new ArrayList()); + for (int i = 0; i < nov + 1; i++) + list.add(i, new ArrayList()); - String s[] = read.readLine().trim().split("\\s+"); - int p = 0; - for (int i = 1; i <= edg; i++) { - int u = Integer.parseInt(s[p++]); - int v = Integer.parseInt(s[p++]); - list.get(u).add(v); - } + String s[] = read.readLine().trim().split("\\s+"); + int p = 0; + for (int i = 1; i <= edg; i++) { + int u = Integer.parseInt(s[p++]); + int v = Integer.parseInt(s[p++]); + list.get(u).add(v); + } - int[] res = new TopologicalSortUtil().topoSort(list, nov); + int[] res = new TopologicalSortUtil().topoSort(list, nov); - if (check(list, nov, res) == true) - System.out.println("1"); - else - System.out.println("0"); - } + if (check(list, nov, res) == true) + System.out.println("1"); + else + System.out.println("0"); } - static boolean check(ArrayList> list, int V, int[] res) { - int[] map = new int[V]; - for (int i = 0; i < V; i++) { - map[res[i]] = i; - } - for (int i = 0; i < V; i++) { - for (int v : list.get(i)) { - if (map[i] > map[v]) return false; - } - } - return true; + } + static boolean check(ArrayList> list, int V, int[] res) { + int[] map = new int[V]; + for (int i = 0; i < V; i++) { + map[res[i]] = i; + } + for (int i = 0; i < V; i++) { + for (int v : list.get(i)) { + if (map[i] > map[v]) + return false; + } } + return true; + } } class TopologicalSortUtil { - static int[] topoSort(ArrayList> adj, int N) { - int[] indegree = new int[N]; - for(int i=0; i temp = adj.get(i); - for(int node : temp) { - indegree[node]++; - } - } - Queue q = new LinkedList<>(); - for(int i=0; i result = new ArrayList<>(); - while(!q.isEmpty()) { - int u = q.poll(); - result.add(u); - for(int node : adj.get(u)) { - if(--indegree[node] == 0) { - q.add(node); - } - } - visited++; - } - int[] arr = new int[result.size()]; - for(int i=0; i> adj, int N) { + int[] indegree = new int[N]; + for (int i = 0; i < N; i++) { + ArrayList temp = adj.get(i); + for (int node : temp) { + indegree[node]++; + } + } + Queue q = new LinkedList<>(); + for (int i = 0; i < N; i++) { + if (indegree[i] == 0) { + q.add(i); + } + } + int visited = 0; + ArrayList result = new ArrayList<>(); + while (!q.isEmpty()) { + int u = q.poll(); + result.add(u); + for (int node : adj.get(u)) { + if (--indegree[node] == 0) { + q.add(node); } - return arr; + } + visited++; + } + int[] arr = new int[result.size()]; + for (int i = 0; i < result.size(); i++) { + arr[i] = result.get(i); } + return arr; + } }