Advertisement
LaCaraDeLaVerga

estrategia b jere tp 1a parte B

May 2nd, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.58 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.  
  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. //para la 1er entretga asumimos un solo espejo
  64. TuplaCaminos  caminoMinimoProbable(){
  65.   ArrayList<Barco> ret0 = new ArrayList<Barco>();
  66.   ArrayList<Barco> ret1 = new ArrayList<Barco>();
  67.  
  68.   ArrayList<Barco> listaQuemados = new ArrayList<Barco>();// es donde voy a agregar los barcos que va quemando
  69.  
  70.  
  71.   TuplaCaminos  ret = new TuplaCaminos();
  72.  
  73.   Integer _min = Integer.MAX_VALUE ;
  74.   Integer _barcoOrigen = 0;
  75.   Integer _cantBarcos = 1;
  76.   Barco cercano1 = null ;
  77.   Barco cercano = null ;
  78.   Barco actual = null ;
  79.   Barco actual1 = null ;
  80.   int contador = barcos.length-3 ;
  81.   // agrego el primer barco al primer camino y lo quemo
  82.  
  83.       int distancia = 2^31-1 ;  //MAX_VALUE
  84.       for (int i = 0; i< distanciaEspejo.length; i++){
  85.           if (distanciaEspejo[i][0] < distancia ){
  86.               distancia = distanciaEspejo[i][0];
  87.               cercano = barcos[i] ;
  88.           }
  89.       }
  90.       ret0.add(cercano) ;  // lo pongo en ret0 (ret0 + ret1 forman la tupla ret )
  91.      
  92.       listaQuemados.add(cercano); // marco que esta quemado
  93.      // System.out.println(" primero agrego en lista0   " + cercano.Nombre);
  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.      
  109.      /*  HASTA ACA EL CODIGO ANDA DE FORMA PERFECTA */    
  110.      
  111.  
  112. //0000000000000000000000000101010101111111111111111110101010110110010101101101101011011001110110111110001011010110110110gato110
  113. // while (contador!=0 ){    
  114.     actual = barcoCercanoEspejo(cercano,listaQuemados);
  115.     ret0.add(actual);
  116.     listaQuemados.add(actual);
  117.          
  118.          
  119.       actual = barcoMasCercano(cercano , listaQuemados);
  120.       ret0.add(actual);
  121.       listaQuemados.add(actual);
  122.      
  123.      
  124.       contador--;
  125.      
  126. //      if (contador == 0){
  127. //          break;
  128. //      }
  129. //-------------------------------------------------------------------------------------------------------        
  130.       actual1 = barcoCercanoEspejo1(cercano1 , listaQuemados);
  131.       ret1.add(actual1);
  132.       listaQuemados.add(actual1);
  133.       actual1 = cercano1 ;
  134.  
  135.       contador--;
  136.      
  137. //      if (contador == 0){
  138. //          break;
  139. //      }
  140. //   }
  141.  
  142.   ret.setC1(ret0);
  143.   ret.setC2(ret1);        //implementar ret1
  144.  
  145.   return ret;
  146.  
  147.  
  148.  
  149.  
  150. }
  151. private Barco barcoCercanoEspejo1(Barco cercano1, ArrayList<Barco> listaQuemados) {
  152.     // TODO Auto-generated method stub
  153.     int distancia1 = 2^31-1 ;  //MAX_VALUE
  154.         for (int i = 0; i< distanciaEspejo.length; i++){
  155.             if (distanciaEspejo[i][1] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  156.                 distancia1 = distanciaEspejo[i][1];
  157.                 cercano1 = barcos[i] ;
  158.             }
  159.         }
  160.     return cercano1;
  161. }
  162.  
  163.  
  164.  
  165.  
  166. private Barco barcoCercanoEspejo(Barco cercano, ArrayList<Barco> listaQuemados) {
  167.     // TODO Auto-generated method stub
  168.     int distancia1 = 2^31-1 ;  //MAX_VALUE
  169.     Barco cercano1=null;
  170.     for (int i = 0; i< distanciaEspejo.length; i++){
  171.         if (distanciaEspejo[i][1] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  172.             distancia1 = distanciaEspejo[i][1];
  173.             cercano1 = barcos[i] ;
  174.         }
  175.     }
  176.     return cercano1;
  177. }
  178.  
  179.  
  180. private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> listaQuemados) {
  181.   int distancia = 2^31-1 ;  //MAX_VALUE
  182.   Barco masCercano = null;
  183.   for (int i = 0; i < tamano(); i++) {
  184.       if (!listaQuemados.contains(barcos[i])) {
  185.           if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
  186.               distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
  187.               masCercano = barcos[i];
  188.           }
  189.       }
  190.   }
  191.  
  192.   return masCercano;
  193. }
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200. Integer  distancia(ArrayList<Barco> camino){
  201.  
  202.   Integer _distancia = 0;
  203.  
  204.   if (camino.size() > 0){
  205.       _distancia = distanciaEspejo[camino.get(0).id][0];
  206.   }
  207.            
  208.   for (int i=0;i< camino.size()-1;i++){
  209.    _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  210.   }
  211.   return _distancia;
  212.  
  213. }
  214.  
  215.  
  216.  
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement