Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.60 KB | None | 0 0
  1. class Solution {
  2.   /**
  3.    * The recursive helper function that performs the depth-first search.
  4.    * @param g the graph
  5.    * @param prev the vertex via which we have reached the vertex u (can be null)
  6.    * @param u the vertex we are currently visiting
  7.    * @param known the vertexes that we have already visited
  8.    */
  9.   public static boolean componentHasCycle(Graph g, Vertex prev, Vertex u, Set<Vertex> known) {
  10.     //if(prev != null && u.compareTo(prev) == 0);
  11.    
  12.    
  13.     known.add(u);
  14.    
  15.     for(Vertex e : g.getNeighbours(u)) {
  16.       if(known.contains(e)) {
  17.         System.out.println("\nNode: " + u.getId() + " Node:" + e.getId());
  18.         if(prev != null && prev.compareTo(e) == 0 && known.size() != g.getAllVertices().size()) return false;
  19.         return true;
  20.       }
  21.       else {
  22.         known.add(e);
  23.         System.out.println("\nNode: " + e.getId());
  24.         if(known.size() == g.getAllVertices().size()) return false;
  25.         return componentHasCycle(g, u, e, known);
  26.       }
  27.     }
  28.     return false;
  29.   }
  30.  
  31.   public static int numCyclicComponents(Graph g) {
  32.     Set<Vertex> known = new TreeSet<>();
  33.     int cc = 0;
  34.    
  35.     for(Vertex e : g.getAllVertices()) {
  36.       if(known.size() == g.getAllVertices().size()) return cc;
  37.       System.out.print("k: " + known.size() + " v: " + g.getAllVertices().size() + " c: " + cc);
  38.       Vertex prev = (e.getId() == 0) ? null : g.getVertexById(e.getId() - 1);
  39.       if(componentHasCycle(g, prev, e, known)) cc++;
  40.       System.out.println("k: " + known.size() + " v: " + g.getAllVertices().size() + " c: " + cc);
  41.     }
  42.     return cc;
  43.   }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement