Advertisement
LaCaraDeLaVerga

Mapa

Apr 17th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.53 KB | None | 0 0
  1. package ejercicio1;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. public class Mapa {
  6.  
  7.     private Barco[] barcos;
  8.     private int[][] distancias; // distancia de i a j
  9.     private int[] distanciaEspejo; // distancia al espejo
  10.     private int n;
  11.     private int distanciaMax;
  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];
  18.         for (int i = 0; i < n; i++) {
  19.             barcos[i] = new Barco(i, "Barco" + i);
  20.             distanciaEspejo[i] = 0;
  21.             for (int j = 0; j < n; j++) {
  22.                 distancias[i][j] = 0; // distancias default en 0
  23.             }
  24.         }
  25.         distanciaMax = distanciaMax();
  26.     }
  27.  
  28.     public int tamano() {
  29.         return n;
  30.     }
  31.  
  32.     public void asignarNombre(Integer ciudadID, String nombre) {
  33.         barcos[ciudadID].Nombre = nombre;
  34.     }
  35.  
  36.     public void setDistIJ(int i, int j, int dist, boolean simetrico) {
  37.         distancias[i][j] = dist;
  38.         if (simetrico) {
  39.             distancias[j][i] = dist;
  40.         }
  41.     }
  42.  
  43.     public void setDistEsp(int i, int dist) {
  44.         distanciaEspejo[i] = dist;
  45.     }
  46.  
  47.     // distancias nominales
  48.     public int getDistIJ(int i, int j) {
  49.         return distancias[i][j];
  50.     }
  51.  
  52.     public int getDistEsp(int i) {
  53.         return distanciaEspejo[i];
  54.     }
  55.  
  56.     // ///////////////////////// PARTE A
  57.     ArrayList<Barco> caminoMinimoProbableA() {
  58.         ArrayList<Barco> ret = new ArrayList<Barco>();
  59.         ret.add(barcoMasCercaCosta());
  60.         Barco barcoActual = barcoMasCercaCosta();
  61.         for (int i = 1; i < tamano(); i++) {
  62.             ret.add(barcoMasCercano(barcoActual, ret));
  63.  
  64.         }
  65.  
  66.         return ret;
  67.     }
  68.  
  69.     private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> quemado) {
  70.         int distancia = distanciaMax;
  71.         Barco masCercano = null;
  72.         for (int i = 0; i < tamano(); i++) {
  73.             if (!estaEnLista(quemado, barcos[i])) {
  74.                 if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
  75.                     distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
  76.                     masCercano = barcos[i];
  77.                 }
  78.             }
  79.         }
  80.  
  81.         return masCercano;
  82.     }
  83.  
  84.     // //////////////////////// PARTE B
  85.     ArrayList<Barco> caminoMinimoProbableB() {
  86.         ArrayList<Barco> ret = new ArrayList<Barco>();
  87.         ret.add(barcoMasCercaCosta());
  88.  
  89.         for (int i = 1; i < tamano(); i++) {
  90.             ret.add(barcoMasCercaCosta(ret));
  91.  
  92.         }
  93.  
  94.         return ret;
  95.     }
  96.  
  97.     private Barco barcoMasCercaCosta(ArrayList<Barco> quemado) { // BUSCA EL
  98.                                                                     // BARCO SIN
  99.                                                                     // QUEMAR
  100.         int distancia = distanciaMax; // MAS CERCANO A LA COSTA
  101.         Barco masCercano = null;
  102.         for (Barco x : barcos) {
  103.             if (!estaEnLista(quemado, x)) {
  104.                 if (getDistEsp(x.id) <= distancia) {
  105.                     distancia = getDistEsp(x.id);
  106.                     masCercano = x;
  107.                 }
  108.             }
  109.         }
  110.         return masCercano;
  111.     }
  112.  
  113.     private Barco barcoMasCercaCosta() { // BUSCA EL BARCO MAS CERCANO A LA
  114.                                             // COSTA
  115.         int distancia = distanciaMax;
  116.         Barco masCercano = null;
  117.         for (Barco x : barcos) {
  118.  
  119.             if (getDistEsp(x.id) <= distancia) {
  120.                 distancia = getDistEsp(x.id);
  121.                 masCercano = x;
  122.             }
  123.         }
  124.         return masCercano;
  125.     }
  126.  
  127.     private boolean estaEnLista(ArrayList<Barco> ret, Barco b) {
  128.         return (ret.contains(b));
  129.     }
  130.  
  131.     private int distanciaMax() {
  132.         int distAux = 0;
  133.         for (int x = 0; x < barcos.length - 1; x++) {
  134.             for (int y = x + 1; y < barcos.length; y++) {
  135.                 if (distAux < getDistIJ(x, y)) {
  136.                     distAux = getDistIJ(x, y);
  137.                 }
  138.             }
  139.         }
  140.         return distAux;
  141.     }
  142.  
  143.     Integer distancia(ArrayList<Barco> camino) {
  144.         Integer _distancia = getDistEsp(barcoMasCercaCosta().id);
  145.         for (int i = 0; i < camino.size() - 1; i++) {
  146.             _distancia = _distancia
  147.                     + distancias[camino.get(i).id][camino.get(i + 1).id];
  148.         }
  149.         return _distancia;
  150.     }
  151.  
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement