Advertisement
LaCaraDeLaVerga

codigoFernet

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