Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. package PracticaSiete;
  2.  
  3. import PracticaCuatro.ListaEnlazada;
  4.  
  5. public class Mapa {
  6.  
  7.     GrafoPesado<String> MapaCiudades;
  8.    
  9.     public Mapa() {
  10.         MapaCiudades = new GrafoPesado<String>();
  11.     }
  12.    
  13.     public void setMapa(GrafoPesado<String> M) {
  14.         MapaCiudades = M;
  15.     }
  16.    
  17.    
  18.     Vertice<String> getVertice(String c) {
  19.         // obtiene el vertice que corresponde a c
  20.         for (Vertice<String> v: MapaCiudades.vertices) {
  21.             if (v.getDato().equals(c)) return v;
  22.         }
  23.         return null;
  24.     }
  25.    
  26.     private boolean existeCamino(boolean[] visit,Vertice<String> v, String f){
  27.         // seteamos como visitado
  28.         visit[v.getPosicion()] = true;
  29.         boolean ok = false;
  30.        
  31.         //para cada adyacente
  32.         ListaEnlazada<Arista<String>> adyacentes = v.getAdyacentes();
  33.         adyacentes.comenzar();
  34.         while(!(adyacentes.fin())) {
  35.             Arista<String> a = adyacentes.elemento();
  36.             if(a.getDestino().getDato().equals(f)) {
  37.                 // si es el destino, terminamos
  38.                 ok = true;
  39.             } else {
  40.                 if(!(visit[a.getDestino().getPosicion()])) {
  41.                     // sino está visitado, volvemos a lazar el método.
  42.                     ok = existeCamino(visit,a.getDestino(), f);
  43.                 }
  44.             }
  45.             adyacentes.proximo();
  46.         }
  47.         return ok;
  48.     }
  49.    
  50.  
  51.    
  52.    
  53.     private ListaEnlazada<String> devolverCamino(boolean[] visit, Vertice<String> v, String f, ListaEnlazada<String> l) {
  54.         //agregamos el dato a la lista y lo seteamos como visitado
  55.         l.agrega(v.getDato());
  56.         visit[v.getPosicion()] = true;
  57.        
  58.         //para cada adyacente...
  59.         ListaEnlazada<Arista<String>> ady = v.getAdyacentes();
  60.         ady.comenzar();
  61.         while(!(ady.fin())) {
  62.             Arista<String> a = ady.elemento();
  63.             // si es el destino, terminamos.
  64.             if(a.getDestino().getDato().equals(f)) {
  65.                 l.agrega(a.getDestino().getDato());
  66.                 return l;
  67.             } else {
  68.                 // si no está visitado...
  69.                 if(!(visit[a.getDestino().getPosicion()])) {
  70.                     Vertice<String> aux = a.getDestino();
  71.                     boolean[] v1 = visit.clone();
  72.                     // y, lleva al destino...
  73.                     if (existeCamino(v1,aux,f)) {
  74.                         // seguimos
  75.                         l = devolverCamino(visit,a.getDestino(), f, l);
  76.                     }
  77.                 }
  78.             }
  79.             ady.proximo();
  80.         }
  81.         if ((v.getDato() != f)&&( l.tamano() == 1)) return null;
  82.         else return l;
  83.     }
  84.    
  85.     public boolean existeCamino (String ciudad1, String ciudad2) {
  86.         // si origen = destino, no hay nada que hacer.
  87.         if (ciudad1 != ciudad2) {
  88.             // creamos el arreglo de visitados
  89.             boolean[] visitados = new boolean[this.MapaCiudades.cantVertices];
  90.             for (int i=0; i < MapaCiudades.cantVertices; i++) {
  91.                 visitados[i]= false;
  92.             }
  93.             // si existe la ciudad de origen...
  94.             Vertice<String> v = getVertice(ciudad1);
  95.             if (v != null){
  96.                 //empieza el recorrido
  97.                 return existeCamino(visitados,getVertice(ciudad1),ciudad2);
  98.             }
  99.             return false;
  100.         }else{
  101.             return true;
  102.         }
  103.     }
  104.    
  105.     public ListaEnlazada<String> devolverCamino (String ciudad1, String ciudad2){
  106.         boolean[] visitados = new boolean[this.MapaCiudades.cantVertices];
  107.         for (int i=0; i < MapaCiudades.cantVertices; i++) {
  108.             visitados[i]= false;
  109.         }
  110.         // creamos la lista para contener el camino
  111.         // y se busca el vertice que corresponde a esa ciudad
  112.         ListaEnlazada<String> l = new ListaEnlazada<String>();
  113.         Vertice<String> v = getVertice(ciudad1);
  114.         if(!(v == null)){
  115.             l = devolverCamino(visitados,v, ciudad2, l);
  116.         }
  117.         return l;
  118.     }
  119.    
  120.     public ListaEnlazada<String> devolverCaminoExceptuando (String ciudad1, String ciudad2, ListaEnlazada<String> ciudades) {
  121.         ListaEnlazada<String> l = new ListaEnlazada<String>();
  122.         boolean[] visitados = new boolean[this.MapaCiudades.cantVertices];
  123.        
  124.         for (int i=0; i < MapaCiudades.cantVertices; i++) {
  125.             if (ciudades.incluye(MapaCiudades.vertices[i].getDato())){
  126.                 visitados[i] = true;
  127.             }
  128.             else visitados[i]= false;
  129.         }
  130.         // una vez "visitadas", se esquivaran en el dfs que devuelve el camino
  131.         // o una lista vacía en caso de que no exista.
  132.         Vertice<String> v = getVertice(ciudad1);
  133.         if(!(v == null)){
  134.             l = devolverCamino(visitados,v, ciudad2, l);
  135.         }
  136.         return l;
  137.     }
  138.    
  139.  
  140.     public ListaEnlazada<String> caminoMasCorto(String ciudad1, String ciudad2) {
  141.         return null;
  142.     }
  143.    
  144.     public ListaEnlazada<String> caminoMasCortoCargandoCombustible (String ciudad1, String ciudad2){
  145.         return null;
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement