Advertisement
heavenriver

2011_05_06.java (ex. 3)

Jan 12th, 2013
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.79 KB | None | 0 0
  1. // Esame del 6 maggio 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, int time, boolean sidewalk (and is oriented);
  7.  
  8. public boolean percorsoPedonale(int source, int dest)
  9.     {
  10.     HashSet<Object> visited = new HashSet<Object>();
  11.     boolean flag = false;
  12.     for(Vertex v: vertices)
  13.         {
  14.         if(v.getInfo() == source)
  15.             checkDFS(v, dest, visited, flag);
  16.         }
  17.     return flag;
  18.     }
  19.  
  20. public void checkDFS(Vertex v, int dest, HashSet<Object> visited, boolean flag)
  21.     {
  22.     visited.put(v);
  23.     for(Edge e : incidentEdges(v))
  24.         {
  25.         if(!visited.contains(e))
  26.             {
  27.             visited.put(e);
  28.             if(e.hasSidewalk())
  29.                 {
  30.                 Vertex w = opposite(e, v);
  31.                 if(!visited.contains(w))
  32.                     {
  33.                     if(w.getInfo() == dest)
  34.                         {
  35.                         flag = true;
  36.                         return;
  37.                         }
  38.                     else checkDFS(w, dest, visited, flag);
  39.                     }
  40.                 }
  41.             }
  42.         }
  43.     }
  44.  
  45. public int tempoMinimo(Vertex src, Vertex dest)
  46.     {
  47.     TreeMap<Integer, Vertex> pq = new TreeMap<Integer, Vertex>();
  48.     HashMap<Vertex, Integer> dist = new HashMap<Vertex, Integer>();
  49.     for(Vertex v : vertices)
  50.         {
  51.         if(v == src)
  52.             {
  53.             pq.put(0, v);
  54.             dist.put(v, 0);
  55.             }
  56.         else
  57.             {
  58.             pq.put(Integer.MAX_VALUE, v);
  59.             dist.put(v, Integer.MAX_VALUE);
  60.             }
  61.         }
  62.     while(!pq.isEmpty())
  63.         {
  64.         Vertex v = pq.pollFirstEntry().getValue();
  65.         for(Edge e : incidentEdges(v))
  66.             {
  67.             Vertex w = opposite(e, v);
  68.             int newDist = dist.get(v) + e.getWeight();
  69.             if(newDist < dist.get(w))
  70.                 {
  71.                 pq.put(newDist, w);
  72.                 dist.put(w, newDist);
  73.                 }
  74.             }
  75.         }
  76.     Integer minTime = dist.get(src);
  77.     if(minTime != null && minTime != Integer.MAX_VALUE) return minTime;
  78.     else return -1;
  79.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement