Advertisement
Guest User

Untitled

a guest
Jul 26th, 2014
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.94 KB | None | 0 0
  1. public List<Comodo> menorCaminho(Comodo partida, Comodo destino) {
  2.         List<Comodo> menorCaminho = new ArrayList<Comodo>();
  3.         menorCaminho.add(partida);
  4.  
  5.         List<Comodo> naoVisitados = new ArrayList<Comodo>();
  6.  
  7.         // Adicionando distancias iniciais
  8.         for (int j = 0; j < comodos.size(); j++) {
  9.             if (comodos.get(j).equals(partida)) {
  10.                 comodos.get(j).setDistancia(0);
  11.             } else {
  12.                 comodos.get(j).setDistancia(Integer.MAX_VALUE);
  13.             }
  14.             // lista do menor caminho
  15.             naoVisitados.add(comodos.get(j));
  16.         }
  17.  
  18.         // O algoritmo percorre todos os vertices até que todos sejam visitados
  19.         while (!naoVisitados.isEmpty()) {
  20.             // Toma-se como referencia o vertice com menor distancia
  21.             Comodo current = naoVisitados.get(0);
  22.  
  23.             // Para cada vizinho, calcula-se a sua possivel distancia,
  24.             // somando a distancia do vertice atual com a da aresta
  25.             // correspondente. Se essa distancia for menor que a distancia do
  26.             // vizinho, esta é atualizada.
  27.             for (int i = 0; i < current.getCorredores().size(); i++) {
  28.                 Comodo verticeDestino = current.getCorredores().get(i).getComodo2();
  29.                 if (!verticeDestino.getVisitado()) {
  30.                     // Comparando a distância do vizinho com as
  31.                     //possiveis diastancias
  32.                     if (verticeDestino.getDistancia() > current.getDistancia()
  33.                             + current.getCorredores().get(i).getPeso()) {
  34.                         verticeDestino.setDistancia(current.getDistancia() + current.getCorredores().get(i).getPeso());
  35.                         verticeDestino.setPai(current);
  36.  
  37.                         // Se o proximo vertice é o procurado, sera feita uma
  38.                         // mudanca na distancia, a lista com o menor caminho
  39.                         // anterior é apagada, pois existe um caminho menor
  40.                         // vertices pais, até o vertice origem.
  41.                         if (verticeDestino.equals(destino)) {
  42.                             menorCaminho.clear();
  43.                             Comodo verticeCam = verticeDestino;
  44.                             menorCaminho.add(verticeDestino);
  45.  
  46.                             while (verticeCam.getPai() != null) {
  47.                                 menorCaminho.add(verticeCam.getPai());
  48.                                 verticeCam = verticeCam.getPai();
  49.                             }
  50.                         }
  51.                     }
  52.                 }
  53.             }
  54.  
  55.             current.setVisitado(true);
  56.             naoVisitados.remove(current);
  57.  
  58.         }
  59.  
  60.         for (int j = 0; j < comodos.size(); j++) {
  61.             comodos.get(j).setPai(null);
  62.             comodos.get(j).setVisitado(false);
  63.             comodos.get(j).setDistancia(0);
  64.         }
  65.  
  66.         return menorCaminho;
  67.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement