Advertisement
LaCaraDeLaVerga

1 parte a

Apr 29th, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.41 KB | None | 0 0
  1. package recuperatorio;
  2.  
  3.  
  4. import java.util.ArrayList;
  5.  
  6. public class Mapa {
  7. private Barco [] barcos;
  8. private int [][] distancias;  // distancia de i a j
  9. private int [][] distanciaEspejo; // distancia del barco i al espejo j
  10.  
  11. private int n;
  12.  
  13. public Mapa(int tamano){
  14.     n= tamano;
  15.     barcos = new Barco [n];
  16.     distancias = new int [n][n];
  17.     distanciaEspejo = new int [n][2];
  18.    
  19.     for (int i=0; i<n; i++){
  20.         barcos [i] = new Barco(i,"Barco" + i);
  21.         distanciaEspejo[i][0] = 0;
  22.         distanciaEspejo[i][1] = 0;
  23.         for (int j=0; j<n; j++){
  24.             distancias[i][j] = 0;   //distancias default en 0
  25.    
  26.         }
  27.     }
  28.    
  29. }
  30.  
  31.  
  32. public int tamano(){
  33.     return n;
  34. }
  35.  
  36.  
  37. public void asignarNombre(Integer ciudadID, String nombre){
  38.     barcos[ciudadID].Nombre = nombre;
  39. }
  40.  
  41. public void setDistIJ(int i, int j, int dist, boolean simetrico){
  42.     distancias[i][j] = dist;
  43.    
  44.     if (simetrico){
  45.         distancias[j][i] = dist;
  46.     }
  47. }
  48.  
  49. public void setDistEsp(int i, int dist, int espejo){
  50.     distanciaEspejo[i][espejo] = dist;
  51.  
  52. }
  53.  
  54. // distancias nominales
  55. public int getDistIJ(int i, int j){ // si es adyacente tomamos ady[i][j]
  56. return distancias[i][j];
  57. }
  58.  
  59.  
  60. TuplaCaminos  caminoMinimoProbable(){
  61.     //****************************************DECLARO VARIABLES *************************** ************************************************ PRIMERO ANALIZAMOS QUE HACE CADA UNA  
  62.        
  63.         ArrayList<Barco> ret0 = new ArrayList<Barco>(); //lista de espejo 0
  64.         ArrayList<Barco> ret1 = new ArrayList<Barco>(); //lista de espejo 1
  65.         TuplaCaminos  ret = new TuplaCaminos();         //creo una tupla de caminos
  66.        
  67.         Integer _min = Integer.MAX_VALUE ;              //_min con un valor maximo int
  68.         Integer _barcoOrigen = 0;                       //barco actual
  69.         Integer _cantBarcos = 1;                        //contador de barcos
  70.      
  71.        
  72.     //***********ACA ARRANCA*********************PRIMERO CON EL ESPEJO 0******************************************************************
  73.         // barco mas cercano al espejo
  74.         for (int i = 0; i< distanciaEspejo.length; i++){ //ciclo para buscar barco mas cercano a espejo 0
  75.             if (distanciaEspejo[i][0] < _min){
  76.                 _min = distanciaEspejo[i][0];
  77.                 _barcoOrigen = i;
  78.             }
  79.         }
  80.        
  81.         int [] quemado = new int [barcos.length];       //lista de barcos quemados
  82.         quemado[_barcoOrigen] = 1;                      //quemo primer barco
  83.         ret0.add(barcos[_barcoOrigen]);                 //agrego a barco quemado a camino de espejo 0
  84.      
  85.         Barco _barcoMasCercana = barcos[_barcoOrigen]; //guardo el barco que quemé en otra variable
  86.        
  87.        
  88.     //********************************AHORA COMIENZA CICLO************** AHORA LE TOCA A ESPEJO 1 ******************************************************************  
  89.        
  90.         while (_cantBarcos < barcos.length ){   //comparo hasta q haya contado todos los barcos
  91.            
  92.            
  93.     //*************************************PARTE DE CICLO PARA ESPEJO 1*******************************************************************    
  94.             _cantBarcos++;                    
  95.      
  96.     //incremento cada vez q paso por un espejo ATENCION! DUPLIQUE ESTA INSTRUCCION. DOS VECES EN EL WHILE PORQUE PASAN DOS ESPEJOS..
  97.     //QUEMO DOS BARCOS... POR LO TANTO EL CONTADOR AUMENTA DOS VECES.
  98.      
  99.             _barcoMasCercana = barcoMasCercano(ret0.get(ret0.size()-1).id, quemado);  //LEER ABAJO
  100.            
  101.             /*                                 ¿¿¿¿QUE HICE?                    
  102.               ACTUALIZO A "_barcoMasCercana" ( O SEA EL BARCO ACTUAL) CON EL BARCO MAS CERCANO,
  103.               LLAMANDO A LA FUNCION "barcoMasCercano".
  104.              
  105.                                             ¿¿¿QUE LE INGRESO???
  106.               EL BARCO QUE ACABÒ DE QUEMAR EL ESPEJO 1 ( ret0.get(ret0.size()-1).id ) QUE ESTÀ EN SU LISTA
  107.               Y LA LISTA DE QUEMADOS    
  108.              */
  109.        
  110.             //                                  LISTO! TENGO EL NUEVO BARCO.
  111.            
  112.             quemado[_barcoMasCercana.id] = 1;    //lo quemo
  113.            
  114.             //                                AHORA LO AGREGO A LA LISTA DEL ESPEJO 1
  115.             ret1.add(_barcoMasCercana);   //cambiè ret0.add(_barcoMasCercana)  por:  ret1.add(_barcoMasCercana)
  116.        
  117.            
  118.            
  119.             //                          ¿¿¿Y AHORA???? LE TOCA AL ESPEJO 0 OTRA VEZ
  120.      
  121.            
  122.            
  123.     //**********************************PARTE DEL CICLO PARA ESPEJO 0***************************************************
  124.            
  125.             _cantBarcos++;                     //incremento cada vez q paso por un espejo
  126.            
  127.             _barcoMasCercana = barcoMasCercano(ret0.get(ret0.size()-1).id, quemado);
  128.            
  129.                                                     //ACA CAMBIÈ ALGO
  130.            
  131.             // PRIMERO EXPLICO QUE HACE:  busco el basco mas cercano al barco actual con la funcion barco mas cercano
  132.             //     le ingreso la id del ultimo barco que quemé con espejo cero y la lista de quemados
  133.             //me devuelve el barco mas cercano al barco ingresado y que no esta quemado
  134.            
  135.             /*                          ¿¿¿¿QUE CAMBIE???
  136.              *
  137.              * CUANDO INGRESO EN LA FUNCION barcoMasCercano LA ID DEL ULTIMO BARCO QUE QUEMÉ Y LA LISTA DE QUEMADOS
  138.             *  TENGO QUE INGRESAR LA ID DEL ULTIMO BARCO QUE QUEMÉ PERO... ¿¿CON QUE ESPEJO LO QUEME??
  139.             *  
  140.             *                                           CON ESPEJO 1!!
  141.             *                                          
  142.             *                 POR LO TANTO TENGO QUE INGRESAR LA LISTA DE BARCOS DE ESPEJO 1
  143.             *                
  144.             *                 ASI LA FUNCION barcoMasCercano BUSCA EL BARCO MAS CERCANO DEL ULTIMO BARCO QUEMADO
  145.             *                
  146.             *                 ENTONCES:
  147.             *                
  148.             *                A _barcoMasCercana = barcoMasCercano(ret0.get(ret0.size()-1).id, quemado);
  149.             *                
  150.             *                LO CAMBIO POR
  151.             *                
  152.             *                _barcoMasCercana = barcoMasCercano(ret1.get(ret1.size()-1).id, quemado);
  153.             */
  154.            
  155.             quemado[_barcoMasCercana.id] = 1;   //quemo el nuevo barco
  156.             ret0.add(_barcoMasCercana);         //agrego el barco que queme a la lista del espejo
  157.            
  158.     //*********************************************************************************************************    
  159.            
  160.         }
  161.                                                 //termina ciclo
  162.         ret.setC1(ret0);                        //agrego camino a la tupla
  163.      
  164.         ret.setC2(ret1);        // UNA VEZ IMPLEMENTADO.  PUEDO AGREGAR LA LISTA DEL ESPEJO 1 AL OBJETO TUPLA
  165.        
  166.         //ANTES ESTABA ret.setC1(ret1);  y pasó a ret.setC2(ret1);
  167.        
  168.         return ret;
  169.     }
  170.      
  171.      
  172.  
  173. private Barco barcoMasCercano(Integer barcoOrigen, int [] quemado){
  174.    
  175.     Integer distMin = Integer.MAX_VALUE;
  176.     Integer barcoMin = Integer.MAX_VALUE;
  177.    
  178.     for (int i=0;i< quemado.length;i++){  
  179.         if (quemado[i] != 1){
  180.             if (distancias[barcoOrigen][i] <distMin){
  181.                 distMin = distancias[barcoOrigen][i];
  182.                 barcoMin=i;
  183.             }
  184.         }
  185.     }
  186.    
  187.     return barcos[barcoMin];
  188.    
  189. }
  190.  
  191. //para la 1er entretga asumimos un solo espejo
  192.  
  193. Integer  distancia(ArrayList<Barco> camino){
  194.  
  195.     Integer _distancia = 0;
  196.  
  197.     if (camino.size() > 0){
  198.         _distancia = distanciaEspejo[camino.get(0).id][0];
  199.     }
  200.    
  201.            
  202.     for (int i=0;i< camino.size()-1;i++){
  203.         _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  204.     }
  205.  
  206.     return _distancia;
  207.    
  208. }
  209.  
  210.  
  211.  
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement