Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public List<Comodo> menorCaminho(Comodo partida, Comodo destino) {
- List<Comodo> menorCaminho = new ArrayList<Comodo>();
- menorCaminho.add(partida);
- List<Comodo> naoVisitados = new ArrayList<Comodo>();
- // Adicionando distancias iniciais
- for (int j = 0; j < comodos.size(); j++) {
- if (comodos.get(j).equals(partida)) {
- comodos.get(j).setDistancia(0);
- } else {
- comodos.get(j).setDistancia(Integer.MAX_VALUE);
- }
- // lista do menor caminho
- naoVisitados.add(comodos.get(j));
- }
- // O algoritmo percorre todos os vertices até que todos sejam visitados
- while (!naoVisitados.isEmpty()) {
- // Toma-se como referencia o vertice com menor distancia
- Comodo current = naoVisitados.get(0);
- // Para cada vizinho, calcula-se a sua possivel distancia,
- // somando a distancia do vertice atual com a da aresta
- // correspondente. Se essa distancia for menor que a distancia do
- // vizinho, esta é atualizada.
- for (int i = 0; i < current.getCorredores().size(); i++) {
- Comodo verticeDestino = current.getCorredores().get(i).getComodo2();
- if (!verticeDestino.getVisitado()) {
- // Comparando a distância do vizinho com as
- //possiveis diastancias
- if (verticeDestino.getDistancia() > current.getDistancia()
- + current.getCorredores().get(i).getPeso()) {
- verticeDestino.setDistancia(current.getDistancia() + current.getCorredores().get(i).getPeso());
- verticeDestino.setPai(current);
- // Se o proximo vertice é o procurado, sera feita uma
- // mudanca na distancia, a lista com o menor caminho
- // anterior é apagada, pois existe um caminho menor
- // vertices pais, até o vertice origem.
- if (verticeDestino.equals(destino)) {
- menorCaminho.clear();
- Comodo verticeCam = verticeDestino;
- menorCaminho.add(verticeDestino);
- while (verticeCam.getPai() != null) {
- menorCaminho.add(verticeCam.getPai());
- verticeCam = verticeCam.getPai();
- }
- }
- }
- }
- }
- current.setVisitado(true);
- naoVisitados.remove(current);
- }
- for (int j = 0; j < comodos.size(); j++) {
- comodos.get(j).setPai(null);
- comodos.get(j).setVisitado(false);
- comodos.get(j).setDistancia(0);
- }
- return menorCaminho;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement