Advertisement
Guest User

Untitled

a guest
Jul 12th, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.13 KB | None | 0 0
  1.     public static ListaGenerica<String> caminoMasCorto(Grafo<String> G , String islaO , String islaD)
  2.     {
  3.         ListaGenerica<String> listaResultado = new ListaEnlazadaGenerica<String>();
  4.         ListaGenerica<Vertice<String>> vertices = G.listaDeVertices();
  5.         ListaGenerica<Vertice<String>> Q = new ListaEnlazadaGenerica<Vertice<String>>();
  6.         int posO=0,posD=0;
  7.         for(vertices.comenzar();!vertices.fin();)
  8.         {
  9.             Vertice<String> v = vertices.proximo();
  10.             Q.agregarFinal(v);
  11.             if(v.dato().equals(islaO))
  12.             {
  13.                 posO = v.posicion();
  14.             }
  15.             if(v.dato().equals(islaD))
  16.             {
  17.                 posD = v.posicion();
  18.             }
  19.         }
  20.         if(posO == 0 && posD == 0)
  21.             return listaResultado;
  22.         /************************************************/
  23.         boolean[] known = new boolean[vertices.tamanio()+1];
  24.         int[] dist = new int[vertices.tamanio()+1];
  25.         @SuppressWarnings("unchecked")
  26.         Vertice<String>[] s =  new VerticeImplListAdy[vertices.tamanio()+1];
  27.        
  28.         for(int i = 1; i<=vertices.tamanio();i++)
  29.             dist[i] = Integer.MAX_VALUE;
  30.         dist[posO] = 0;
  31.        
  32.         while(!Q.esVacia())
  33.         {
  34.             Vertice<String> v = eliminarMin(Q,dist);
  35.             ListaGenerica<Arista<String>> ady = G.listaDeAdyacentes(v);
  36.             known[v.posicion()] = true;
  37.             for(ady.comenzar();!ady.fin();)
  38.             {
  39.                 Arista<String> arista = ady.proximo();
  40.                 if(!known[arista.verticeDestino().posicion()])
  41.                 {
  42.                     Vertice<String> w = arista.verticeDestino();
  43.                     int alt = dist[v.posicion()] + arista.peso();
  44.                     if(alt<dist[w.posicion()])
  45.                     {
  46.                         dist[w.posicion()] = alt;
  47.                         s[w.posicion()] = v;
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.        
  53.         Vertice<String> v = vertices.elemento(posD);
  54.         while(v != null)
  55.         {
  56.             listaResultado.agregarFinal(v.dato());
  57.             System.out.println(v.dato());
  58.             v=s[v.posicion()];
  59.         }
  60.        
  61.         return listaResultado;
  62.     }
  63.    
  64.     private static Vertice<String> eliminarMin(ListaGenerica<Vertice<String>> Q, int[] dist)
  65.     {
  66.         Vertice<String> res = null;
  67.         int distMin=Integer.MAX_VALUE;
  68.         for(Q.comenzar();!Q.fin();)
  69.         {
  70.             Vertice<String> v = Q.proximo();
  71.             if(dist[v.posicion()] < distMin)
  72.             {
  73.                 distMin=dist[v.posicion()];
  74.                 res=v; 
  75.             }
  76.            
  77.         }
  78.         Q.eliminar(res);
  79.         return res;
  80.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement