Advertisement
LaCaraDeLaVerga

jTPRA

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