Advertisement
LaCaraDeLaVerga

parte b

May 4th, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.81 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. TuplaCaminos  caminoMinimoProbableEstrategiaB(){
  64.   ArrayList<Barco> ret0 = new ArrayList<Barco>();
  65.   ArrayList<Barco> ret1 = new ArrayList<Barco>();
  66.   ArrayList<Barco> listaQuemados = new ArrayList<Barco>();// es donde voy a agregar los barcos que va quemando
  67.   TuplaCaminos  ret = new TuplaCaminos();
  68.   Integer _min = Integer.MAX_VALUE ;
  69.   Integer _barcoOrigen = 0;
  70.   Integer _cantBarcos = 1;
  71.   Barco cercano1 = null ;
  72.   Barco cercano = null ;
  73.   Barco actual = null ;
  74.   Barco actual1 = null ;
  75.   boolean run =true ;             // ESTE BOOLEAN LO USO PARA FINALIZAR EL CICLO PRINCIPAL
  76. //  ##############################################################################################################
  77. // agrego el primer barco al primer camino y lo quemo
  78.       int distancia = 2^31-1 ;  //MAX_VALUE
  79.       for (int i = 0; i< distanciaEspejo.length; i++){
  80.           if (distanciaEspejo[i][0] < distancia ){
  81.               distancia = distanciaEspejo[i][0];
  82.               cercano = barcos[i] ;
  83.           }
  84.       }
  85.       ret0.add(cercano) ;  // lo pongo en ret0 (ret0 + ret1 forman la tupla ret )
  86.       listaQuemados.add(cercano); // marco que esta quemado
  87. //##################################################################################################################
  88.       // agrego el primer barco al segundo camino y lo quemo
  89.       int distancia1 = 2^31-1 ;  //MAX_VALUE
  90.       for (int i = 0; i< distanciaEspejo.length; i++){
  91.           if (distanciaEspejo[i][1] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  92.               distancia1 = distanciaEspejo[i][1];
  93.               cercano1 = barcos[i] ;
  94.           }
  95.       }
  96.       ret1.add(cercano1) ;
  97.       listaQuemados.add(cercano1);  
  98. //#################################           CICLO PRINCIPAL             #########################################
  99.  
  100.  while (run ){    
  101.     actual = barcoCercanoEspejo(cercano,listaQuemados);
  102.     ret0.add(actual);
  103.     listaQuemados.add(actual);
  104.       actual = barcoMasCercano(cercano , listaQuemados);
  105.       ret0.add(actual);
  106.       listaQuemados.add(actual);
  107.       if (listaQuemados.size()== barcos.length) {
  108.           run = false ;
  109. }      
  110. //-------------------------------------------------------------------------------------------------------        
  111.       actual1 = barcoCercanoEspejo1(cercano1 , listaQuemados);
  112.       ret1.add(actual1);
  113.       listaQuemados.add(actual1);
  114.       actual1 = cercano1 ;
  115.       if (listaQuemados.size()== barcos.length) {
  116.         run = false ;
  117.    }
  118.  }      
  119. //#################################           CICLO PRINCIPAL             #########################################
  120.  
  121.   ret.setC1(ret0);
  122.   ret.setC2(ret1);        //implementar ret1
  123.  
  124.   return ret;
  125.  
  126.  }
  127.  
  128.  
  129.  
  130. private Barco barcoCercanoEspejo1(Barco cercano1, ArrayList<Barco> listaQuemados) {
  131.     // TODO Auto-generated method stub
  132.     int distancia1 = 2^31-1 ;  //MAX_VALUE
  133.         for (int i = 0; i< distanciaEspejo.length; i++){
  134.             if (distanciaEspejo[i][1] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  135.                 distancia1 = distanciaEspejo[i][1];
  136.                 cercano1 = barcos[i] ;
  137.             }
  138.         }
  139.     return cercano1;
  140. }
  141.  
  142.  
  143.  
  144.  
  145. private Barco barcoCercanoEspejo(Barco cercano, ArrayList<Barco> listaQuemados) {
  146.     // TODO Auto-generated method stub
  147.     int distancia1 = 2^31-1 ;  //MAX_VALUE
  148.     Barco cercano1=null;
  149.     for (int i = 0; i< distanciaEspejo.length; i++){
  150.         if (distanciaEspejo[i][0] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  151.             distancia1 = distanciaEspejo[i][0];
  152.             cercano1 = barcos[i] ;
  153.         }
  154.     }
  155.     return cercano1;
  156. }
  157.  
  158.  
  159. private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> listaQuemados) {
  160.   int distancia = 2^31-1 ;  //MAX_VALUE
  161.   Barco masCercano = null;
  162.   for (int i = 0; i < tamano(); i++) {
  163.       if (!listaQuemados.contains(barcos[i])) {
  164.           if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
  165.               distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
  166.               masCercano = barcos[i];
  167.           }
  168.       }
  169.   }
  170.  
  171.   return masCercano;
  172. }
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179. Integer  distancia(ArrayList<Barco> camino){
  180.  
  181.   Integer _distancia = 0;
  182.  
  183.   if (camino.size() > 0){
  184.       _distancia = distanciaEspejo[camino.get(0).id][0];
  185.   }
  186.            
  187.   for (int i=0;i< camino.size()-1;i++){
  188.    _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  189.   }
  190.   return _distancia;
  191.  
  192. }
  193.  
  194.  
  195.  
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement