import java.util.ArrayList; public class Mapa { private Barco [] barcos; private int [][] distancias; // distancia de i a j private int [][] distanciaEspejo; // distancia del barco i al espejo j private int n; public Mapa(int tamano){ n= tamano; barcos = new Barco [n]; distancias = new int [n][n]; distanciaEspejo = new int [n][2]; for (int i=0; i ret0 = new ArrayList(); ArrayList ret1 = new ArrayList(); TuplaCaminos ret = new TuplaCaminos(); Integer _min = Integer.MAX_VALUE ; Integer _barcoOrigen = 0; Integer _cantBarcos = 1; // barco mas cercano al espejo for (int i = 0; i< distanciaEspejo.length; i++){ if (distanciaEspejo[i][0] < _min){ _min = distanciaEspejo[i][0]; _barcoOrigen = i; } } int [] quemado = new int [barcos.length]; quemado[_barcoOrigen] = 1; //ya pase barco origen ret0.add(barcos[_barcoOrigen]); Barco _barcoMasCercana = barcos[_barcoOrigen]; while (_cantBarcos < barcos.length ){ _cantBarcos++; _barcoMasCercana = barcoMasCercano(ret1.get(ret1.size()-1).id, quemado); quemado[_barcoMasCercana.id] = 1; ret1.add(_barcoMasCercana); _barcoMasCercana = barcoMasCercano(ret0.get(ret0.size()-1).id, quemado); quemado[_barcoMasCercana.id] = 1; ret0.add(_barcoMasCercana); } ret.setC1(ret0); ret.setC1(ret1); // implementar ret1 return ret; } private Barco barcoMasCercano(Integer barcoOrigen, int [] quemado){ Integer distMin = Integer.MAX_VALUE; Integer barcoMin = Integer.MAX_VALUE; for (int i=0;i< quemado.length;i++){ if (quemado[i] != 1){ if (distancias[barcoOrigen][i] camino){ Integer _distancia = 0; if (camino.size() > 0){ _distancia = distanciaEspejo[camino.get(0).id][0]; } for (int i=0;i< camino.size()-1;i++){ _distancia = _distancia + distancias[camino.get(i).id][camino.get(i+1).id]; } return _distancia; } }