/** * Calculates the number of components and the size of the largest component * in a UndirectedGraph * * @param g The graph to calculate */ private void calculateComponentsDFS(UndirectedGraph g) { int size = g.numVertices(); boolean[] visited = new boolean[size]; int components = 0; int largest_component = 0; CalcAction component = new CalcAction(); // Kör vår action på varje nod som inte är besökt än for (int v = 0; v < size; v++) { if (!visited[v]) { depthFirstSearch(g, v, visited, component); components++; if (component.getSize() > largest_component) largest_component = component.getSize(); component.reset(); } } System.out.println("Components: " + components + "\tLargest component: " + largest_component); } private static class CalcAction implements VertexAction { private int size = 0; public void act(UndirectedGraph g, int v) { size++; } public int getSize() { return size; } public void reset() { size = 0; } }