fork download
  1. import java.*;
  2. import java.util.*;
  3. import java.io.*;
  4.  
  5.  
  6. // Written by: Yancy Vance M. Paredes.
  7.  
  8. // Finding all strongly connected components using Tarjan's algorithm.
  9.  
  10. public class StronglyConnectedTarjan {
  11.  
  12. public static int index;
  13. public static Stack<Node> stack;
  14. public static Vector<Vector<Node>> set;
  15.  
  16. public static void main(String[] args) throws Exception {
  17. Scanner iFile = new Scanner(new FileReader("stronglyConnectedTarjan.in"));
  18. Graph graph = new Graph();
  19. graph.setDirected();
  20. graph.setSortedNeighbors(true);
  21.  
  22. while(iFile.hasNext()) {
  23. Node<String> a = new Node<String>(iFile.next());
  24. Node<String> b = new Node<String>(iFile.next());
  25.  
  26. int aPos = graph.indexOf(a);
  27. int bPos = graph.indexOf(b);
  28.  
  29. // If a does not exist in the graph yet.
  30. if(aPos == -1)
  31. aPos = graph.addNode(a);
  32.  
  33. // If b does not exist in the graph yet.
  34. if(bPos == -1)
  35. bPos = graph.addNode(b);
  36.  
  37. Edge edge = new Edge(graph.getNodeAt(aPos), graph.getNodeAt(bPos));
  38.  
  39. graph.addEdge(edge);
  40. }
  41.  
  42. //graph.printNodes();
  43. //graph.printEdges();
  44.  
  45. Vector<Node> nodes = graph.getNodes();
  46. index = 0;
  47. stack = new Stack<Node>();
  48. set = new Vector<Vector<Node>>();
  49.  
  50. // Use all the different nodes as the root or source node.
  51. for(int i = 0; i < nodes.size(); i++) {
  52. Node node = nodes.elementAt(i);
  53.  
  54. if(node.index == null)
  55. strongConnect(graph, node);
  56. }
  57.  
  58. for(int i = 0; i < set.size(); i++)
  59. System.out.println("Set " + i + ": " + set.elementAt(i));
  60.  
  61. iFile.close();
  62. }
  63.  
  64. public static void strongConnect(Graph graph, Node node) {
  65. node.index = index;
  66. node.lowlink = index;
  67. index++;
  68. stack.push(node);
  69.  
  70. Vector<Node> neighbors = graph.getNeighbors(node);
  71.  
  72. for(int i = 0; i < neighbors.size(); i++) {
  73. Node neighbor = neighbors.elementAt(i);
  74.  
  75. if(neighbor.index == null) {
  76. strongConnect(graph, neighbor);
  77. node.lowlink = Math.min(node.lowlink, neighbor.lowlink);
  78. }
  79. else if(stack.contains(neighbor)) {
  80. node.lowlink = Math.min(node.lowlink, neighbor.index);
  81. }
  82. }
  83.  
  84. if(node.lowlink == node.index) {
  85. Vector<Node> subset = new Vector<Node>();
  86. Node neighbor = null;
  87.  
  88. while(node != neighbor) {
  89. neighbor = stack.pop();
  90. subset.add(neighbor);
  91. }
  92.  
  93. set.add(subset);
  94. }
  95.  
  96. }
  97.  
  98. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
aplaya matina
matina mc_arthur
mc_arthur magallanes
magallanes san_pedro
san_pedro claveria
magallanes claveria
claveria aplaya
aplaya bago
bago talomo
talomo bago
compilation info
Main.java:10: error: class StronglyConnectedTarjan is public, should be declared in a file named StronglyConnectedTarjan.java
public class StronglyConnectedTarjan {
       ^
Main.java:13: error: cannot find symbol
    public static Stack<Node> stack;
                        ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:14: error: cannot find symbol
    public static Vector<Vector<Node>> set;
                                ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:64: error: cannot find symbol
    public static void strongConnect(Graph graph, Node node) {
                                     ^
  symbol:   class Graph
  location: class StronglyConnectedTarjan
Main.java:64: error: cannot find symbol
    public static void strongConnect(Graph graph, Node node) {
                                                  ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:18: error: cannot find symbol
        Graph graph = new Graph();
        ^
  symbol:   class Graph
  location: class StronglyConnectedTarjan
Main.java:18: error: cannot find symbol
        Graph graph = new Graph();
                          ^
  symbol:   class Graph
  location: class StronglyConnectedTarjan
Main.java:23: error: cannot find symbol
            Node<String> a = new Node<String>(iFile.next());
            ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:23: error: cannot find symbol
            Node<String> a = new Node<String>(iFile.next());
                                 ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:24: error: cannot find symbol
            Node<String> b = new Node<String>(iFile.next());
            ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:24: error: cannot find symbol
            Node<String> b = new Node<String>(iFile.next());
                                 ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:37: error: cannot find symbol
            Edge edge = new Edge(graph.getNodeAt(aPos), graph.getNodeAt(bPos));
            ^
  symbol:   class Edge
  location: class StronglyConnectedTarjan
Main.java:37: error: cannot find symbol
            Edge edge = new Edge(graph.getNodeAt(aPos), graph.getNodeAt(bPos));
                            ^
  symbol:   class Edge
  location: class StronglyConnectedTarjan
Main.java:45: error: cannot find symbol
        Vector<Node> nodes = graph.getNodes();
               ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:47: error: cannot find symbol
        stack = new Stack<Node>();
                          ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:48: error: cannot find symbol
        set = new Vector<Vector<Node>>();
                                ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:52: error: cannot find symbol
            Node node = nodes.elementAt(i);
            ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:70: error: cannot find symbol
        Vector<Node> neighbors = graph.getNeighbors(node);
               ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:73: error: cannot find symbol
            Node neighbor = neighbors.elementAt(i);
            ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:85: error: cannot find symbol
            Vector<Node> subset = new Vector<Node>();
                   ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:85: error: cannot find symbol
            Vector<Node> subset = new Vector<Node>();
                                             ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
Main.java:86: error: cannot find symbol
            Node neighbor = null;
            ^
  symbol:   class Node
  location: class StronglyConnectedTarjan
22 errors
stdout
Standard output is empty