Advertisement
LaCaraDeLaVerga

codigo espejo

Apr 26th, 2016
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.80 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. //int [] quemado; // recibe una lista con  barcos destruidos ;
  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. //  quemado = new int[n];
  19.     for (int i=0; i<n; i++){
  20. //      quemado[i] = 0;  // 0 =true
  21.         barcos [i] = new Barco(i,"Barco" + i);
  22.         distanciaEspejo[i][0] = 0;
  23.         distanciaEspejo[i][1] = 0;
  24.         for (int j=0; j<n; j++){
  25.             distancias[i][j] = 0;   //distancias default en 0
  26.    
  27.         }
  28.     }
  29.    
  30. }
  31.  
  32.  
  33. public int tamano(){
  34.     return n;
  35. }
  36.  
  37.  
  38. public void asignarNombre(Integer ciudadID, String nombre){
  39.     barcos[ciudadID].Nombre = nombre;
  40. }
  41.  
  42. public void setDistIJ(int i, int j, int dist, boolean simetrico){
  43.     distancias[i][j] = dist;
  44.    
  45.     if (simetrico){
  46.         distancias[j][i] = dist;
  47.     }
  48. }
  49.  
  50. public void setDistEsp(int i, int dist, int espejo){
  51.     distanciaEspejo[i][espejo] = dist;
  52.  
  53. }
  54.  
  55. // distancias nominales
  56. public int getDistIJ(int i, int j){ // si es adyacente tomamos ady[i][j]
  57. return distancias[i][j];
  58. }
  59.  
  60.  
  61.  
  62. Integer barcoCercanoEspejo (int espejo ){
  63.     Integer ret=0 ;
  64.     Integer _min = Integer.MAX_VALUE ;
  65.    
  66.     for (int i = 0; i< distanciaEspejo.length; i++){
  67.         if (distanciaEspejo[i][espejo] < _min){
  68.             _min = distanciaEspejo[i][espejo];
  69.             ret = i;
  70.         }
  71.     }
  72.    
  73.     return ret ;
  74. }
  75.  
  76.  
  77. //para la 1er entretga asumimos un solo espejo
  78. TuplaCaminos  caminoMinimoProbable(){
  79.     ArrayList<Barco> ret0 = new ArrayList<Barco>();
  80.     ArrayList<Barco> ret1 = new ArrayList<Barco>();
  81.     TuplaCaminos  ret = new TuplaCaminos();
  82.    
  83.     Integer _min = Integer.MAX_VALUE ;
  84.     Integer _barcoOrigen = 0;
  85.     Integer _cantBarcos = 1;
  86.    
  87.    
  88.    
  89.     // barco mas cercano al espejo
  90. //  for (int i = 0; i< distanciaEspejo.length; i++){
  91. //      if (distanciaEspejo[i][0] < _min){
  92. //          _min = distanciaEspejo[i][0];
  93. //          _barcoOrigen = i;
  94. //      }
  95. //  }
  96.  
  97.     _barcoOrigen = barcoCercanoEspejo( 0 );
  98.    
  99.     quemado[_barcoOrigen] = 1;  //ya pase barco origen
  100.     ret0.add(barcos[_barcoOrigen]);
  101.     //busca barco mas cercano , lo quema y lo añade a ret0
  102.    
  103.     // barco mas cercano al espejo1
  104. //      for (int i = 0; i< distanciaEspejo.length; i++){
  105. //          if (distanciaEspejo[i][1] < _min){
  106. //              _min = distanciaEspejo[i][1];
  107. //              _barcoOrigen = i;
  108. //          }
  109. //      }
  110. // 
  111. //      quemado[_barcoOrigen] = 1;  //ya pase barco origen
  112. //      ret1.add(barcos[_barcoOrigen]); -  
  113.        
  114.     //--------------------------------------------
  115.    
  116.  
  117.     Barco _barcoMasCercana = barcos[_barcoOrigen];
  118.    
  119.     while (_cantBarcos < barcos.length ){  
  120.         _cantBarcos++;
  121.        
  122.         _barcoMasCercana = barcoMasCercano(ret1.get(ret1.size()-1).id, quemado);
  123.         quemado[_barcoMasCercana.id] = 1;
  124.         ret1.add(_barcoMasCercana);
  125.        
  126.        
  127.         _barcoMasCercana = barcoMasCercano(ret0.get(ret0.size()-1).id, quemado);
  128.         quemado[_barcoMasCercana.id] = 1;
  129.         ret0.add(_barcoMasCercana);
  130.        
  131.        
  132.        
  133.     }
  134.    
  135.     ret.setC1(ret0);
  136.     ret.setC2(ret1);        //implementar ret1
  137.    
  138.     return ret;
  139. }
  140.  
  141. private Barco barcoMasCercano(Integer barcoOrigen, int [] quemado){
  142.    
  143.     Integer distMin = Integer.MAX_VALUE;
  144.     Integer barcoMin = Integer.MAX_VALUE;
  145.    
  146.     for (int i=0;i< quemado.length;i++){  
  147.         if (quemado[i] != 1){
  148.             if (distancias[barcoOrigen][i] <distMin){
  149.                 distMin = distancias[barcoOrigen][i];
  150.                 barcoMin=i;
  151.             }
  152.         }
  153.     }
  154.    
  155.     return barcos[barcoMin];
  156.    
  157. }
  158.  
  159.  
  160.  
  161. //para la 1er entretga asumimos un solo espejo
  162.  
  163. Integer  distancia(ArrayList<Barco> camino){
  164.  
  165.     Integer _distancia = 0;
  166.  
  167.     if (camino.size() > 0){
  168.         _distancia = distanciaEspejo[camino.get(0).id][0];
  169.     }
  170.    
  171.            
  172.     for (int i=0;i< camino.size()-1;i++){
  173.         _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  174.     }
  175.  
  176.     return _distancia;
  177.    
  178. }
  179.  
  180.  
  181.  
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement