Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ejercicio1;
- import java.util.ArrayList;
- public class Mapa {
- private Barco[] barcos;
- private int[][] distancias; // distancia de i a j
- private int[] distanciaEspejo; // distancia al espejo
- private int n;
- private int distanciaMax;
- public Mapa(int tamano) {
- n = tamano;
- barcos = new Barco[n];
- distancias = new int[n][n];
- distanciaEspejo = new int[n];
- for (int i = 0; i < n; i++) {
- barcos[i] = new Barco(i, "Barco" + i);
- distanciaEspejo[i] = 0;
- for (int j = 0; j < n; j++) {
- distancias[i][j] = 0; // distancias default en 0
- }
- }
- distanciaMax = distanciaMax();
- }
- public int tamano() {
- return n;
- }
- public void asignarNombre(Integer ciudadID, String nombre) {
- barcos[ciudadID].Nombre = nombre;
- }
- public void setDistIJ(int i, int j, int dist, boolean simetrico) {
- distancias[i][j] = dist;
- if (simetrico) {
- distancias[j][i] = dist;
- }
- }
- public void setDistEsp(int i, int dist) {
- distanciaEspejo[i] = dist;
- }
- // distancias nominales
- public int getDistIJ(int i, int j) {
- return distancias[i][j];
- }
- public int getDistEsp(int i) {
- return distanciaEspejo[i];
- }
- // ///////////////////////// PARTE A
- ArrayList<Barco> caminoMinimoProbableA() {
- ArrayList<Barco> ret = new ArrayList<Barco>();
- ret.add(barcoMasCercaCosta());
- Barco barcoActual = barcoMasCercaCosta();
- for (int i = 1; i < tamano(); i++) {
- ret.add(barcoMasCercano(barcoActual, ret));
- }
- return ret;
- }
- private Barco barcoMasCercano(Barco barcoOrigen, ArrayList<Barco> quemado) {
- int distancia = distanciaMax;
- Barco masCercano = null;
- for (int i = 0; i < tamano(); i++) {
- if (!estaEnLista(quemado, barcos[i])) {
- if (getDistIJ(barcoOrigen.id, barcos[i].id) <= distancia) {
- distancia = getDistIJ(barcoOrigen.id, barcos[i].id);
- masCercano = barcos[i];
- }
- }
- }
- return masCercano;
- }
- // //////////////////////// PARTE B
- ArrayList<Barco> caminoMinimoProbableB() {
- ArrayList<Barco> ret = new ArrayList<Barco>();
- ret.add(barcoMasCercaCosta());
- for (int i = 1; i < tamano(); i++) {
- ret.add(barcoMasCercaCosta(ret));
- }
- return ret;
- }
- private Barco barcoMasCercaCosta(ArrayList<Barco> quemado) { // BUSCA EL
- // BARCO SIN
- // QUEMAR
- int distancia = distanciaMax; // MAS CERCANO A LA COSTA
- Barco masCercano = null;
- for (Barco x : barcos) {
- if (!estaEnLista(quemado, x)) {
- if (getDistEsp(x.id) <= distancia) {
- distancia = getDistEsp(x.id);
- masCercano = x;
- }
- }
- }
- return masCercano;
- }
- private Barco barcoMasCercaCosta() { // BUSCA EL BARCO MAS CERCANO A LA
- // COSTA
- int distancia = distanciaMax;
- Barco masCercano = null;
- for (Barco x : barcos) {
- if (getDistEsp(x.id) <= distancia) {
- distancia = getDistEsp(x.id);
- masCercano = x;
- }
- }
- return masCercano;
- }
- private boolean estaEnLista(ArrayList<Barco> ret, Barco b) {
- return (ret.contains(b));
- }
- private int distanciaMax() {
- int distAux = 0;
- for (int x = 0; x < barcos.length - 1; x++) {
- for (int y = x + 1; y < barcos.length; y++) {
- if (distAux < getDistIJ(x, y)) {
- distAux = getDistIJ(x, y);
- }
- }
- }
- return distAux;
- }
- Integer distancia(ArrayList<Barco> camino) {
- Integer _distancia = getDistEsp(barcoMasCercaCosta().id);
- for (int i = 0; i < camino.size() - 1; i++) {
- _distancia = _distancia
- + distancias[camino.get(i).id][camino.get(i + 1).id];
- }
- return _distancia;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement