Advertisement
LaCaraDeLaVerga

punta 1 a estrategia A

May 2nd, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.23 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.       while (contador!=0 ){
  112. //0000000000000000000000000101010101111111111111111110101010110110010101101101101011011001110110111110001011010110110110gato110
  113.    
  114.          
  115.       actual = barcoMasCercano(cercano , listaQuemados);
  116.       ret0.add(actual);
  117.       listaQuemados.add(actual);
  118.      
  119.      
  120.       contador--;
  121.      
  122.       if (contador == 0){
  123.           break;
  124.       }
  125. //-------------------------------------------------------------------------------------------------------        
  126.       actual1 = barcoMasCercano(cercano1 , listaQuemados);
  127.       ret1.add(actual1);
  128.       listaQuemados.add(actual1);
  129.       actual1 = cercano1 ;
  130.  
  131.      
  132.      
  133.      
  134.       }
  135.      /*  HASTA ACA EL CODIGO ANDA DE FORMA PERFECTA */  
  136.      
  137.      
  138.                                   /*problemas con el pinche ciclo principal */      
  139.      
  140. //###########################################################################################################################################      
  141. //while (listaQuemados.size()-1 <= barcos.length ){
  142. //
  143. //    barcoMasCercano(actual , listaQuemados);
  144. //    ret0.add(actual);
  145. //    listaQuemados.add(actual);
  146. //
  147. //    barcoMasCercano(actual1 , listaQuemados);
  148. //    ret1.add(actual1);
  149. //    listaQuemados.add(actual1);
  150. //}      
  151. //###########################################################################################################################################
  152.  
  153.   ret.setC1(ret0);
  154.   ret.setC2(ret1);        //implementar ret1
  155.  
  156.   return ret;
  157.  
  158.  
  159.  
  160.  
  161. }
  162. private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> listaQuemados) {
  163.   int distancia = 2^31-1 ;  //MAX_VALUE
  164.   Barco masCercano = null;
  165.   for (int i = 0; i < tamano(); i++) {
  166.       if (!listaQuemados.contains(barcos[i])) {
  167.           if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
  168.               distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
  169.               masCercano = barcos[i];
  170.           }
  171.       }
  172.   }
  173.  
  174.   return masCercano;
  175. }
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182. Integer  distancia(ArrayList<Barco> camino){
  183.  
  184.   Integer _distancia = 0;
  185.  
  186.   if (camino.size() > 0){
  187.       _distancia = distanciaEspejo[camino.get(0).id][0];
  188.   }
  189.            
  190.   for (int i=0;i< camino.size()-1;i++){
  191.    _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  192.   }
  193.   return _distancia;
  194.  
  195. }
  196.  
  197.  
  198.  
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement