Advertisement
heavenriver

2011_06_21.java (ex. 3)

Jan 12th, 2013
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.63 KB | None | 0 0
  1. // Esame del 21 giugno 2011, 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 Vertex has int pos;
  6. class Edge has double length, String name (and is oriented);
  7.  
  8. public void streetCleaner()
  9.     {
  10.     HashSet<Object> visited = new HashSet<Object>();
  11.     for(Vertex v : vertices)
  12.         {
  13.         if(!visited.contains(v))
  14.             DFSRemoval(v, visited);
  15.         }
  16.     }
  17.  
  18. public void DFSRemoval(Vertex v, HashSet<Object> visited)
  19.     {
  20.     visited.put(v);
  21.     for(Edge e : incidentEdges(v))
  22.         {
  23.         if(!visited.contains(e))
  24.             {
  25.             visited.put(e);
  26.             Vertex w = opposite(e, v);
  27.             if(e.getName() == null) removeEdge(e);
  28.             if(!visited.contains(w))
  29.                 DFSRemoval(w, visited);
  30.             }
  31.         }
  32.     }
  33.  
  34. public List<Vertex> isocrone(Vertex src, int min, int max)
  35.     {
  36.     TreeMap<Integer, Vertex> pq = new TreeMap<Integer, Vertex>();
  37.     HashMap<Vertex, Integer> dist = new HashMap<Vertex, Integer>();
  38.     for(Vertex v : vertices)
  39.         {
  40.         if(v == src)
  41.             {
  42.             pq.put(0, v);
  43.             dist.put(v, 0);
  44.             }
  45.         else
  46.             {
  47.             pq.put(Integer.MAX_VALUE, v);
  48.             dist.put(v, Integer.MAX_VALUE);
  49.             }
  50.         }
  51.     while(!pq.isEmpty())
  52.         {
  53.         Vertex v = pq.pollFirstEntry().getValue();
  54.         for(Edge e : incidentEdges(v))
  55.             {
  56.             Vertex w = opposite(e, v);
  57.             int newDist = dist.get(v) + e.getWeight();
  58.             if(newDist < dist.get(w))
  59.                 {
  60.                 pq.put(newDist, w);
  61.                 dist.put(w, newDist);
  62.                 }
  63.             }
  64.         }
  65.     List<Vertex> out = new LinkedList<Vertex>();
  66.     for(Vertex v : vertices)
  67.         {
  68.         if(dist.get(v) <= min && dist.get(v) >= max)
  69.             out.put(v);
  70.         }
  71.     return out;
  72.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement