Advertisement
LaCaraDeLaVerga

Version casi final 1A jere (gonzaxxx)

May 1st, 2016
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.62 KB | None | 0 0
  1. package recuperatorio;
  2.  
  3. import java.util.ArrayList;
  4.  
  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.     ArrayList<Barco> listaQuemados = new ArrayList<Barco>();
  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.  
  69.     ArrayList<Barco> listaQuemados = new ArrayList<Barco>();// es donde voy a agregar los barcos que va quemando
  70.    
  71.    
  72.     TuplaCaminos  ret = new TuplaCaminos();
  73.    
  74.     Integer _min = Integer.MAX_VALUE ;
  75.     Integer _barcoOrigen = 0;
  76.     Integer _cantBarcos = 1;
  77.     Barco cercano1 = null ;
  78.     Barco cercano = null ;
  79.     Barco actual = null ;
  80.     Barco actual1 = null ;
  81.     int contador = 0 ;
  82.     // agrego el primer barco al primer camino y lo quemo
  83.    
  84.         int distancia = 2^31-1 ;  //MAX_VALUE
  85.         for (int i = 0; i< distanciaEspejo.length; i++){
  86.             if (distanciaEspejo[i][0] < distancia ){
  87.                 distancia = distanciaEspejo[i][0];
  88.                 cercano = barcos[i] ;
  89.             }
  90.         }
  91.         ret0.add(cercano) ;  // lo pongo en ret0 (ret0 + ret1 forman la tupla ret )
  92.         listaQuemados.add(cercano); // marco que esta quemado
  93.  
  94.      // agrego el primer barco al segundo camino y lo quemo
  95.        
  96.        
  97.         int distancia1 = 2^31-1 ;  //MAX_VALUE
  98.         for (int i = 0; i< distanciaEspejo.length; i++){
  99.             if (distanciaEspejo[i][1] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  100.                 distancia1 = distanciaEspejo[i][1];
  101.                 cercano1 = barcos[i] ;
  102.             }
  103.         }
  104.         ret1.add(cercano1) ;
  105.         listaQuemados.add(cercano1);  
  106.        
  107.        
  108.        /*  HASTA ACA EL CODIGO ANDA DE FORMA PERFECTA */    
  109.            
  110. //0000000000000000000000000101010101111111111111111110101010110110010101101101101011011001110110111110001011010110110110gato110
  111.         actual = barcoMasCercano(cercano , listaQuemados);
  112.         ret0.add(actual);
  113.         listaQuemados.add(actual);
  114.  
  115.         actual1 = barcoMasCercano(cercano1 , listaQuemados);
  116.         ret1.add(actual1);
  117.         listaQuemados.add(actual1);
  118.        
  119.        
  120.        /*  HASTA ACA EL CODIGO ANDA DE FORMA PERFECTA */  
  121.        
  122.        
  123.                                     /*problemas con el pinche ciclo principal */       
  124.        
  125. //###########################################################################################################################################      
  126. //  while (listaQuemados.size()-1 <= barcos.length ){
  127. // 
  128. //      barcoMasCercano(actual , listaQuemados);
  129. //      ret0.add(actual);
  130. //      listaQuemados.add(actual);
  131. //
  132. //      barcoMasCercano(actual1 , listaQuemados);
  133. //      ret1.add(actual1);
  134. //      listaQuemados.add(actual1);
  135. //  }      
  136. //###########################################################################################################################################
  137.    
  138.     ret.setC1(ret0);
  139.     ret.setC2(ret1);        //implementar ret1
  140.    
  141.     return ret;
  142. }
  143. private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> listaQuemados) {
  144.     int distancia = 2^31-1 ;  //MAX_VALUE
  145.     Barco masCercano = null;
  146.     for (int i = 0; i < tamano(); i++) {
  147.         if (!listaQuemados.contains(barcos[i])) {
  148.             if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
  149.                 distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
  150.                 masCercano = barcos[i];
  151.             }
  152.         }
  153.     }
  154.    
  155.     return masCercano;
  156. }
  157.  
  158.  
  159.  
  160.  
  161.  
  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