Advertisement
LaCaraDeLaVerga

beta1

Apr 26th, 2016
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.83 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class Mapa {
  4. private Barco [] barcos;
  5. private int [][] distancias;  // distancia de i a j
  6. private int [][] distanciaEspejo; // distancia del barco i al espejo j
  7.  
  8. private int n;
  9.  
  10. public Mapa(int tamano){
  11.     n= tamano;
  12.     barcos = new Barco [n];
  13.     distancias = new int [n][n];
  14.     distanciaEspejo = new int [n][2];
  15.    
  16.     for (int i=0; i<n; i++){
  17.         barcos [i] = new Barco(i,"Barco" + i);
  18.         distanciaEspejo[i][0] = 0;
  19.         distanciaEspejo[i][1] = 0;
  20.         for (int j=0; j<n; j++){
  21.             distancias[i][j] = 0;   //distancias default en 0
  22.         }
  23.     }  
  24. }
  25. public int tamano(){
  26.     return n;
  27. }
  28.  
  29. public void asignarNombre(Integer ciudadID, String nombre){
  30.     barcos[ciudadID].Nombre = nombre;
  31. }
  32.  
  33. public void setDistIJ(int i, int j, int dist, boolean simetrico){
  34.     distancias[i][j] = dist;
  35.    
  36.     if (simetrico){
  37.         distancias[j][i] = dist;
  38.     }
  39. }
  40.  
  41. public void setDistEsp(int i, int dist, int espejo){
  42.     distanciaEspejo[i][espejo] = dist;
  43. }
  44. // distancias nominales
  45. public int getDistIJ(int i, int j){ // si es adyacente tomamos ady[i][j]
  46. return distancias[i][j];
  47. }
  48.  
  49. //para la 1er entretga asumimos un solo espejo
  50.  
  51.  
  52. //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  53. TuplaCaminos  caminoMinimoProbable(){
  54.     ArrayList<Barco> ret0 = new ArrayList<Barco>();
  55.     ArrayList<Barco> ret1 = new ArrayList<Barco>();
  56.     TuplaCaminos  ret = new TuplaCaminos();
  57.    
  58.     Integer _min = Integer.MAX_VALUE ;
  59.     Integer _min1 = Integer.MAX_VALUE ;
  60.     Integer _barcoOrigen = 0;
  61.     Integer _barcoOrigen1 = 0;
  62.     Integer _cantBarcos = 1;
  63.    
  64.     int [] quemado = new int [barcos.length];
  65.  
  66.    
  67.    
  68.     // barco mas cercano al espejo 1
  69.     for (int i = 0; i< distanciaEspejo.length; i++){ //recorre todas las distancias del espejo a los barcos
  70.         if (distanciaEspejo[i][0] < _min){          //
  71.             _min = distanciaEspejo[i][0];
  72.             _barcoOrigen = i;
  73.         }
  74.     }
  75.    
  76.     quemado[_barcoOrigen] = 1;  //ya pase barco origen
  77.     ret0.add(barcos[_barcoOrigen]);
  78.  
  79.     Barco _barcoMasCercana = barcos[_barcoOrigen];
  80.  
  81.    
  82.    
  83. //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  
  84.     // barco mas cercano al espejo numero 2
  85.     for (int i = 0; i< distanciaEspejo.length; i++){ //recorre todas las distancias del espejo a los barcos
  86.         if (distanciaEspejo[i][1] < _min1){         //
  87.             _min1 = distanciaEspejo[i][1];
  88.             _barcoOrigen1 = i;
  89.         }
  90.     }
  91.    
  92.     quemado[_barcoOrigen1] = 1; //ya pase barco origen
  93.     ret1.add(barcos[_barcoOrigen1]);
  94.  
  95.     Barco _barcoMasCercana1 = barcos[_barcoOrigen1];   
  96.    
  97.    
  98.    
  99.    
  100. //  while (_cantBarcos < barcos.length ){  
  101.         _cantBarcos++;
  102.        
  103.         _barcoMasCercana = barcoMasCercano(ret0.get(ret0.size()-1).id, quemado);
  104.         quemado[_barcoMasCercana.id] = 1;
  105.         ret0.add(_barcoMasCercana);
  106.  
  107.        
  108.        
  109.         _barcoMasCercana1 = barcoMasCercano(ret1.get(ret1.size()-1).id, quemado);
  110.         quemado[_barcoMasCercana1.id] = 1;
  111.         ret1.add(_barcoMasCercana1);
  112.  
  113.    
  114. //  }
  115.    
  116.     ret.setC1(ret0);
  117.     ret.setC1(ret1);        //implementar ret1
  118.    
  119.     return ret;
  120. }
  121. //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4
  122. private Barco barcoMasCercano(Integer barcoOrigen, int [] quemado){
  123.    
  124.     Integer distMin = Integer.MAX_VALUE;
  125.     Integer barcoMin = Integer.MAX_VALUE;
  126.    
  127.     for (int i=0;i< quemado.length;i++){  
  128.         if (quemado[i] != 1){
  129.             if (distancias[barcoOrigen][i] <distMin){
  130.                 distMin = distancias[barcoOrigen][i];
  131.                 barcoMin=i;
  132.             }
  133.         }
  134.     }
  135.    
  136.     return barcos[barcoMin];
  137.    
  138. }
  139.  
  140. //para la 1er entretga asumimos un solo espejo
  141.  
  142. Integer  distancia(ArrayList<Barco> camino){
  143.  
  144.     Integer _distancia = 0;
  145.  
  146.     if (camino.size() > 0){
  147.         _distancia = distanciaEspejo[camino.get(0).id][0];
  148.     }
  149.    
  150.            
  151.     for (int i=0;i< camino.size()-1;i++){
  152.         _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  153.     }
  154.  
  155.     return _distancia;
  156.    
  157. }
  158.  
  159.  
  160.  
  161.  
  162.  
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement