Advertisement
LaCaraDeLaVerga

Que vuelvan los simpsons a telefe

May 2nd, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.22 KB | None | 0 0
  1. package punto1;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. public class Mapa2 {
  6. private Barco [] barcos;
  7. private int [][] distancias;  // distancia de i a j
  8. private int [][] distanciaEspejo; // distancia del barco i al espejo j
  9.  
  10. private int n;
  11.  
  12. public Mapa2(int tamano){
  13.     n= tamano;
  14.     barcos = new Barco [n];
  15.     distancias = new int [n][n];
  16.     distanciaEspejo = new int [n][2];
  17.     ArrayList<Barco> listaQuemados = new ArrayList<Barco>();
  18.    
  19.    
  20.    
  21.     for (int i=0; i<n; i++){
  22.         barcos [i] = new Barco(i,"Barco" + i);
  23.         distanciaEspejo[i][0] = 0;
  24.         distanciaEspejo[i][1] = 0;
  25.         for (int j=0; j<n; j++){
  26.             distancias[i][j] = 0;   //distancias default en 0
  27.    
  28.         }
  29.     }
  30.    
  31. }
  32.  
  33.  
  34. public int tamano(){
  35.     return n;
  36. }
  37.  
  38.  
  39. public void asignarNombre(Integer ciudadID, String nombre){
  40.     barcos[ciudadID].Nombre = nombre;
  41. }
  42.  
  43. public void setDistIJ(int i, int j, int dist, boolean simetrico){
  44.     distancias[i][j] = dist;
  45.    
  46.     if (simetrico){
  47.         distancias[j][i] = dist;
  48.     }
  49. }
  50.  
  51. public void setDistEsp(int i, int dist, int espejo){
  52.     distanciaEspejo[i][espejo] = dist;
  53.  
  54. }
  55.  
  56. // distancias nominales
  57. public int getDistIJ(int i, int j){ // si es adyacente tomamos ady[i][j]
  58. return distancias[i][j];
  59. }
  60.  
  61.  
  62. //para la 1er entretga asumimos un solo espejo
  63. Tuplacaminos  caminoMinimoProbable(){
  64.   ArrayList<Barco> ret0 = new ArrayList<Barco>();
  65.   ArrayList<Barco> ret1 = new ArrayList<Barco>();
  66.  
  67.   ArrayList<Barco> listaQuemados = new ArrayList<Barco>();// es donde voy a agregar los barcos que va quemando
  68.  
  69.  
  70.   Tuplacaminos  ret = new Tuplacaminos();
  71.  
  72.   Integer _min = Integer.MAX_VALUE ;
  73.   Integer _barcoOrigen = 0;
  74.   Integer _cantBarcos = 1;
  75.   Barco cercano1 = null ;
  76.   Barco cercano = null ;
  77.   Barco actual = null ;
  78.   Barco actual1 = null ;
  79.   int contador = barcos.length-3 ;
  80.   // agrego el primer barco al primer camino y lo quemo
  81.  
  82.       int distancia = 2^31-1 ;  //MAX_VALUE
  83.       for (int i = 0; i< distanciaEspejo.length; i++){
  84.           if (distanciaEspejo[i][0] < distancia ){
  85.               distancia = distanciaEspejo[i][0];
  86.               cercano = barcos[i] ;
  87.           }
  88.       }
  89.       ret0.add(cercano) ;  // lo pongo en ret0 (ret0 + ret1 forman la tupla ret )
  90.      
  91.       listaQuemados.add(cercano); // marco que esta quemado
  92.      // System.out.println(" primero agrego en lista0   " + cercano.Nombre);
  93.    // agrego el primer barco al segundo camino y lo quemo
  94.      
  95.      
  96.       int distancia1 = 2^31-1 ;  //MAX_VALUE
  97.       for (int i = 0; i< distanciaEspejo.length; i++){
  98.           if (distanciaEspejo[i][1] < distancia1 && !listaQuemados.contains(barcos[i]) ){
  99.               distancia1 = distanciaEspejo[i][1];
  100.               cercano1 = barcos[i] ;
  101.           }
  102.       }
  103.       ret1.add(cercano1) ;
  104.       listaQuemados.add(cercano1);  
  105.      
  106.  
  107.      
  108.      /*  HASTA ACA EL CODIGO ANDA DE FORMA PERFECTA */    
  109.      
  110.       while (contador!=0 ){
  111. //0000000000000000000000000101010101111111111111111110101010110110010101101101101011011001110110111110001011010110110110gato110
  112.    
  113.          
  114.       actual = barcoMasCercano(cercano , listaQuemados);
  115.       ret0.add(actual);
  116.       listaQuemados.add(actual);
  117.      
  118.      
  119.       contador--;
  120.      
  121.       if (contador == 0){
  122.           break;
  123.       }
  124. //-------------------------------------------------------------------------------------------------------        
  125.       actual1 = barcoMasCercano(cercano1 , listaQuemados);
  126.       ret1.add(actual1);
  127.       listaQuemados.add(actual1);
  128.       actual1 = cercano1 ;
  129.  
  130.      
  131.      
  132.      
  133.       }
  134.      /*  HASTA ACA EL CODIGO ANDA DE FORMA PERFECTA */  
  135.      
  136.      
  137.                                   /*problemas con el pinche ciclo principal */      
  138.      
  139. //###########################################################################################################################################      
  140. //while (listaQuemados.size()-1 <= barcos.length ){
  141. //
  142. //    barcoMasCercano(actual , listaQuemados);
  143. //    ret0.add(actual);
  144. //    listaQuemados.add(actual);
  145. //
  146. //    barcoMasCercano(actual1 , listaQuemados);
  147. //    ret1.add(actual1);
  148. //    listaQuemados.add(actual1);
  149. //}      
  150. //###########################################################################################################################################
  151.  
  152.   ret.setC1(ret0);
  153.   ret.setC2(ret1);        //implementar ret1
  154.  
  155.   return ret;
  156.  
  157.  
  158.  
  159.  
  160. }
  161. private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> listaQuemados) {
  162.   int distancia = 2^31-1 ;  //MAX_VALUE
  163.   Barco masCercano = null;
  164.   for (int i = 0; i < tamano(); i++) {
  165.       if (!listaQuemados.contains(barcos[i])) {
  166.           if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
  167.               distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
  168.               masCercano = barcos[i];
  169.           }
  170.       }
  171.   }
  172.  
  173.   return masCercano;
  174. }
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181. Integer  distancia(ArrayList<Barco> camino){
  182.  
  183.   Integer _distancia = 0;
  184.  
  185.   if (camino.size() > 0){
  186.       _distancia = distanciaEspejo[camino.get(0).id][0];
  187.   }
  188.            
  189.   for (int i=0;i< camino.size()-1;i++){
  190.    _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id];
  191.   }
  192.   return _distancia;
  193.  
  194. }
  195.  
  196.  
  197.  
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement