Advertisement
ganryu

BusquedaA

May 29th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.43 KB | None | 0 0
  1. package agentesIA;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.List;
  6. import java.util.Set;
  7.  
  8. public class BusquedaA {
  9.     private Nodo nodoInicial;
  10.     private Nodo nodoObjetivo;
  11.     private List<Nodo> visitados;
  12.     private List<Nodo> frontera = new ArrayList<Nodo>();
  13.    
  14.     public BusquedaA() {
  15.         this.addNodos();
  16.     }
  17.    
  18.     public Nodo busqueda() {
  19.         frontera.add(this.nodoInicial);
  20.         Nodo nodoActual;
  21.         int costeActual;
  22.         int i;
  23.        
  24.         while(!frontera.isEmpty()) {
  25.             Collections.sort(frontera); // Super ineficiente, pensar luego como implementar
  26.                                         // una cola de prioridad actualizable
  27.             nodoActual = frontera.remove(0);
  28.            
  29.             if(nodoActual.equals(nodoObjetivo)) { return nodoActual; }
  30.            
  31.             Set<Nodo> hijos = nodoActual.getHijos();
  32.            
  33.             for(Nodo hijo: hijos) {
  34.                 costeActual = nodoActual.getCosteHijo(hijo);
  35.                
  36.                 i = visitados.indexOf(hijo);
  37.                 if(i != -1 && visitados.get(i).coste < costeActual) {
  38.                     continue;
  39.                 }
  40.                 visitados.remove(hijo);
  41.                
  42.                 i = frontera.indexOf(hijo);
  43.                 if(i != -1 && frontera.get(i).coste < costeActual) {
  44.                     continue;
  45.                 }
  46.                 frontera.remove(hijo);
  47.                
  48.                 hijo.coste = costeActual;
  49.                 hijo.padre = nodoActual;
  50.                 frontera.add(hijo);
  51.             }
  52.            
  53.             visitados.add(nodoActual);
  54.         }
  55.        
  56.         return null; // No encontrado
  57.     }
  58.    
  59.     public void mostrarCamino(Nodo nodo) {
  60.         if(nodo.padre != null) {
  61.             mostrarCamino(nodo.padre);
  62.         }
  63.         System.out.println(nodo);
  64.     }
  65.    
  66.     private void addNodos() {
  67.         Nodo ushuaia = Nodo.crearNodo("Ushuaia", 3152);
  68.         Nodo tucuman = Nodo.crearNodo("Tucuman", 0);
  69.         Nodo sanLuis = Nodo.crearNodo("San Luis", 730);
  70.         Nodo rioGallegos = Nodo.crearNodo("Rio Gallegos", 2780);
  71.         Nodo rosario = Nodo.crearNodo("Rosario", 813);
  72.         Nodo neuquen = Nodo.crearNodo("Neuquen", 1386);
  73.         Nodo mendoza = Nodo.crearNodo("Mendoza", 764);
  74.         Nodo cordoba = Nodo.crearNodo("Cordoba", 525);
  75.         Nodo buenosAires = Nodo.crearNodo("Buenos Aires", 1085);
  76.         Nodo comodoroRivadavia = Nodo.crearNodo("Comodoro Rivadavia", 2088);
  77.         Nodo salta = Nodo.crearNodo("Salta", 226);
  78.        
  79.         ushuaia.addHijo(rioGallegos, 580);
  80.  
  81.         tucuman.addHijo(mendoza, 955);
  82.         tucuman.addHijo(cordoba, 565);
  83.         tucuman.addHijo(buenosAires, 1251);
  84.  
  85.         sanLuis.addHijo(neuquen, 770);
  86.         sanLuis.addHijo(cordoba, 428);
  87.         sanLuis.addHijo(buenosAires, 830);
  88.  
  89.         rioGallegos.addHijo(comodoroRivadavia, 778);
  90.         rioGallegos.addHijo(ushuaia, 580);
  91.  
  92.         rosario.addHijo(cordoba, 405);
  93.         rosario.addHijo(buenosAires, 298);
  94.  
  95.         neuquen.addHijo(sanLuis, 770);
  96.  
  97.         mendoza.addHijo(cordoba, 638);
  98.         mendoza.addHijo(tucuman, 955);
  99.  
  100.         cordoba.addHijo(mendoza, 638);
  101.         cordoba.addHijo(tucuman, 565);
  102.         cordoba.addHijo(rosario, 405);
  103.         cordoba.addHijo(buenosAires, 695);
  104.         cordoba.addHijo(sanLuis, 428);
  105.  
  106.         buenosAires.addHijo(sanLuis, 830);
  107.         buenosAires.addHijo(cordoba, 695);
  108.         buenosAires.addHijo(tucuman, 1251);
  109.         buenosAires.addHijo(rosario, 298);
  110.         buenosAires.addHijo(salta, 1462);
  111.  
  112.         comodoroRivadavia.addHijo(rioGallegos, 778);
  113.         comodoroRivadavia.addHijo(sanLuis, 1745);
  114.         comodoroRivadavia.addHijo(buenosAires, 1761);
  115.  
  116.         salta.addHijo(tucuman, 306);
  117.         salta.addHijo(buenosAires, 1462);
  118.        
  119.         this.nodoInicial = comodoroRivadavia;
  120.         this.nodoObjetivo = tucuman;
  121.     }
  122.    
  123.     public void main() {
  124.         BusquedaA a = new BusquedaA();
  125.         Nodo f = a.busqueda();
  126.         if(f != null) {
  127.             a.mostrarCamino(f);
  128.         } else {
  129.             System.out.println("No se ha encontrado un camino");
  130.         }
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement