Advertisement
heavenriver

2012_07_24.java (ex. 3) (DFS with edge marking)

Jan 12th, 2013
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.05 KB | None | 0 0
  1. // Esame del 24 luglio 2012, esercizio 3
  2. // Ricordarsi di specificare sempre, nei commenti al codice, l'utilità di ogni metodo.
  3. // Per le implementazioni standard di un grafo riferirsi a GraphImplementations.java
  4.  
  5. class Graph has public enum Label = { DISCOVERY, BACK, CROSS, FORWARD };
  6.  
  7. public void DFS()
  8.     {
  9.     HashMap<Edge, Label> mark = new HashMap<Edge, Label>();
  10.     HashMap<Vertex, Integer> visited = new HashMap<Vertex, Integer>();
  11.     for(Vertex v : vertices)
  12.         {
  13.         if(!visited.containsKey(v))
  14.             DFSMark(v, mark, visited, 0);
  15.         }
  16.     }
  17.  
  18. public void DFSMark(Vertex v, HashMap<Edge, Label> mark, HashMap<Vertex, Integer> visited, int layer)
  19.     {
  20.     visited.put(v, layer);
  21.     for(Edge e : incidentEdges(v))
  22.         {
  23.         Vertex w = opposite(e, v);
  24.         if(!visited.containsKey(w))
  25.             {
  26.             mark.put(e, Label.DISCOVERY);
  27.             DFSMark(w, mark, visited, layer + 1);
  28.             }
  29.         else
  30.             {
  31.             if(layer - visited.get(w) < 0)
  32.                 mark.put(e, Label.FORWARD);
  33.             else if(layer - visited.get(w) > 1)
  34.                 mark.put(e, Label.BACK);
  35.             else
  36.                 mark.put(e, Label.CROSS);
  37.             }
  38.         }
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement