Java - Ayuda con arreglos

 
Vista:

Ayuda con arreglos

Publicado por Juan (2 intervenciones) el 12/12/2018 04:00:37
Ayuda con mi proyecto, no se como poner las nuevas antenas en el nuevo arreglo (Adjunto archivo para que se entienda mejor) el proyecto es en java.

Enserio seria de gran ayuda, gracias.

y el código es el siguiente:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ProyectoFinal
{
 
	public static void main(String[] args) throws IOException {
        BufferedReader lector = new BufferedReader (new InputStreamReader(System.in));
 
        int a=0, b=0, r=0, fa=0, ca=0, x=0, y=0, ap=0;
        double resultado=0, cuadrado=0;
 
        System.out.println("Ingresa el numero de filas: ");
        a=Integer.parseInt(lector.readLine());
 
        if (a<=1 || a>=100)
        {
        	System.out.println("Por favor ingresa de nuevo el numero de filas: ");
        	a=Integer.parseInt(lector.readLine());
        }
 
        System.out.println ("Ingresa el numero de columnas: ");
        b=Integer.parseInt(lector.readLine());
 
        if (b<=1 || b>=100)
        {
        	System.out.println("Por favor ingresa de nuevo el numero de columnas:  ");
        }
 
        int [][] fc = new int [a][b];
 
        System.out.println ("Ingresa el numero de antenas principales: ");
        ap=Integer.parseInt(lector.readLine());
 
        if (ap<=0 || ap>=500)
        {
        	System.out.println("POr favor ingresa de nuevo el numero de antenas principales: ");
        	ap=Integer.parseInt(lector.readLine());
        }
 
        for (int l =0; l<ap; l++)
        {
 
            System.out.println("Ingrese la fila de la antena: ");
            fa=Integer.parseInt(lector.readLine());
 
            if (fa>a)
            {
                System.out.println("Por favor ingresa de nuevo la fila: ");
                fa=Integer.parseInt(lector.readLine());
            }
 
            System.out.println("Ingrese la columna de la antena: ");
            ca=Integer.parseInt(lector.readLine());
 
            if (ca>b)
            {
                System.out.println("Por favor ingresa de nuevo la columna: ");
                ca=Integer.parseInt(lector.readLine());
            }
 
            for (int j=0; j<a; j++)
            {
                for (int k=0; k<b; k++)
                {
                    fc [fa-1][ca-1]=9;
                }
            }
 
            System.out.println("Ingresa el rango: ");
            r=Integer.parseInt(lector.readLine());
 
            if (r<=1 || r>=19)
            {
                System.out.println("POr favor ingresa de nuevo el rango: ");
                r=Integer.parseInt(lector.readLine());
            }
 
            x=r-1;
            y=x/2;
 
            for (int i=fa-1-y; i<fa+y; i++)
            {
                for (int j=ca-1-y; j<ca+y; j++)
                {
                    fc [i][j]=2;
                    if (fc[fa-1][ca-1]== fc[i][j])
                    {
                        fc [fa-1][ca-1]=9;
                    }
                }
            }
        }
 
        System.out.println("-------------------");
 
        for (int i=0; i<a; i++)
        {
        	for (int j=0; j<b; j++)
        	{
        		System.out.print ("[" + fc [i][j] + "]");
        	}
        	System.out.println();
        }
 
        cuadrado = r*r;
		resultado = a*b/cuadrado;
 
		System.out.println("");
		System.out.println("El número de antenas mínimo que se van a ocupar es de " + Math.ceil(resultado));
 
 
		System.out.println ("------------------------");
 
 
 
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.640
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con arreglos

Publicado por Billy Joel (777 intervenciones) el 12/12/2018 16:19:35
¿Podrías poner el enunciado a ver si logro entender lo que quieres hacer?

Oh ya lo he visto en el PDF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con arreglos

Publicado por Juan (2 intervenciones) el 12/12/2018 17:00:37
Enserio me seria de mucha ayuda algún consejo, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.640
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con arreglos

Publicado por Billy Joel (777 intervenciones) el 13/12/2018 15:14:01
Parece que necesito mas tiempo para desarrollar la lógica para que sea el programa quien asigne las nuevas antenas.
Voy hacer que sea el usuario quien asigne las nuevas antenas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
 
public class JuanProyectoFinal {
 
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
    public static int leerEnteroConRango(String mensaje, int min, int max) {
        return leerEnteroConRango(mensaje, min, max, "");
    }
 
    /**
     * Metodo utilizado para leer un número
     *
     * @param mensaje
     * @param min
     * @param max
     * @param error
     * @return
     */
    public static int leerEnteroConRango(String mensaje, int min, int max, String error) {
        int numero;
        try {
            System.out.print(error + mensaje);
            numero = Integer.parseInt(br.readLine());
            if (numero < min || numero > max) {
                numero = leerEnteroConRango(mensaje.toLowerCase(), min, max, "Valor fuera de rango. El valor debe ir entre " + min + " y " + max + ". ");
            }
        } catch (IOException | NumberFormatException ex) {
            numero = leerEnteroConRango(mensaje, min, max, "Por favor ");
        }
        return numero;
    }
 
    public static int radioCobertura(int diametro) {
        return (diametro / 2);
    }
 
    /**
     * Establece la cobertura de una antena
     *
     * @param matriz
     * @param x: coordenada x de la antena que se va a establecer
     * @param y: coordenada y de la antena que se va a establecer
     * @param L
     */
    public static void setearCoberturaAntena(String[][] matriz, int x, int y, int L) {
        int x_min, y_min, x_max, y_max;
        int radio = radioCobertura(L);
        x_min = x - radio < 0 ? 0 : x - radio;
        y_min = y - radio < 0 ? 0 : y - radio;
        x_max = x + radio < matriz.length - 1 ? x + radio : matriz.length - 1;
        y_max = y + radio < matriz[0].length - 1 ? y + radio : matriz[0].length - 1;
        for (int i = x_min; i <= x_max; i++) {
            for (int j = y_min; j <= y_max; j++) {
                matriz[i][j] = matriz[i][j].equals("1") || matriz[i][j].equals("2") ? matriz[i][j] : "0";
            }
        }
    }
 
    public static void mostrarMatriz(String[][] matriz) {
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[0].length; j++) {
                System.out.print("[" + matriz[i][j] + "]");
            }
            System.out.println();
        }
    }
 
    public static Antena[] getAntenasIdeales(String[][] matriz, int L) {
        List<Antena> antenas = new ArrayList();
        int x_min, y_min, x_max, y_max;
 
        for (int i = 0; i < matriz.length; i = i + L) {
            y_min = i;
//            y_max = y_min + L - 1;
            y_max = (y_min + L) > matriz.length ? matriz.length - 1 : y_min + L - 1;
            for (int j = 0; j < matriz[0].length; j = j + L) {
                x_min = j;
//                x_max = x_min + L - 1;
                x_max = (x_min + L) > matriz[0].length ? matriz[0].length - 1 : x_min + L - 1;
                if (!isCuadranteTieneCobertura(matriz, x_min, y_min, x_max, y_max)) {
                    antenas.add(getAntenaIdeal(matriz, x_min, y_min, x_max, y_max, L));
                }
                if (j + L >= matriz[0].length) {
                    x_min = x_max + 1;
                    x_max = matriz[0].length - 1;
                    if (!isCuadranteTieneCobertura(matriz, x_min, y_min, x_max, y_max)) {
                        antenas.add(getAntenaIdeal(matriz, x_min, y_min, x_max, y_max, L));
                    }
                }
            }
 
        }
        Antena[] a = new Antena[antenas.size()];
        antenas.toArray(a);
        return a;
    }
 
    public static Antena getAntenaIdeal(String[][] matriz, int x_min, int y_min, int x_max, int y_max, int L) {
        int x = radioCobertura(L) + x_min > matriz[0].length - 1 ? matriz[0].length - 1 : radioCobertura(L) + x_min;
        int y = radioCobertura(L) + y_min > matriz.length - 1 ? matriz.length - 1 : radioCobertura(L) + y_min;
        return new Antena(x, y);
    }
 
    /**
     * Evalúa cada una de las coordenadas del cuadrante, si algun punto no tiene
     * cobertura entonces entonces devolverá false
     *
     * @param matriz
     * @param x_min
     * @param y_min
     * @param x_max
     * @param y_max
     * @return
     */
    public static boolean isCuadranteTieneCobertura(String[][] matriz, int x_min, int y_min, int x_max, int y_max) {
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[0].length; j++) {
                if (matriz[i][j].equals("_")) {
                    return false;
                }
            }
        }
        return true;
    }
 
    public static void main(String[] args) throws IOException {
        int M = leerEnteroConRango("Introduzca el número de filas de la ciudad: ", 1, 100);
        int N = leerEnteroConRango("Introduzca el número de columnas de la ciudad: ", 1, 100);
        int L;
        do {
            L = leerEnteroConRango("Introduzca el largo del cuadrado que cubre una antena: ", 1, 19);
            if (L < 1 || L % 2 == 0) {
                System.out.println("ATENCION\nEl largo del cuadrado que cubre una antena debe ser impar. Vuelva a ingresar");
            }
        } while (L % 2 != 1);
        int A = leerEnteroConRango("Introduzca el numero de antenas colocadas actualmente: ", 0, 500);
        int[] antenaFilas = new int[A];
        int[] antenaColumnas = new int[A];
        for (int i = 0; i < A; i++) {
            antenaFilas[i] = leerEnteroConRango("Fila de la antena " + (i + 1) + ": ", 1, M - 1);
            antenaColumnas[i] = leerEnteroConRango("Columna de la antena " + (i + 1) + ": ", 1, N - 1);
        }
        //Inicializamos la matriz
        String[][] matriz = new String[M][N];
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                matriz[i][j] = "_";
            }
        }
        //Colocamos las antenas colocadas dentro de la matriz
        for (int i = 0; i < A; i++) {
            matriz[antenaFilas[i]][antenaColumnas[i]] = "1";
            setearCoberturaAntena(matriz, antenaFilas[i], antenaColumnas[i], L);
        }
 
        //Ahora mostramos la matriz de la ciudad con sus coberturas
        mostrarMatriz(matriz);
        System.out.println("\n\n----------------------------------------------------");
 
//        //Seteamos antenas ideales
        Antena[] antenasIdeales = getAntenasIdeales(matriz, L);
        for (int i = 0; i < antenasIdeales.length; i++) {
            matriz[antenasIdeales[i].getX()][antenasIdeales[i].getY()] = "2";
            setearCoberturaAntena(matriz, antenasIdeales[i].getX(), antenasIdeales[i].getY(), L);
        }
        //Volvemos a mostrar la matriz de la ciudad con sus coberturas
        mostrarMatriz(matriz);
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.640
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con arreglos

Publicado por Billy Joel (777 intervenciones) el 13/12/2018 17:27:40
Parece que ya conseguí resolverlo solo dame un poquito mas de tiempo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.640
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con arreglos

Publicado por Billy Joel (777 intervenciones) el 13/12/2018 21:11:03
Después de haber leido el PDF te digo que ni siquiera vi tu código.
Para completar el proyecto me ha tomado 2 días realmente estaba dificil.
El primer día entendí algo pero el segundo día casi que lo volví hacer de 0.
Como es una matriz y puntos x,y perdí como hora y media confundido hasta que me decidí por cambiar el concepto de filas y columnas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public static void main(String[] args) throws IOException {
    int M = leerEnteroConRango("Introduzca el número de filas de la ciudad: ", 1, 100);
    int N = leerEnteroConRango("Introduzca el número de columnas de la ciudad: ", 1, 100);
    int L;
    do {
        L = leerEnteroConRango("Introduzca el largo del cuadrado que cubre una antena: ", 1, 19);
        if (L < 1 || L % 2 == 0) {
            System.out.println("ATENCION\nEl largo del cuadrado que cubre una antena debe ser impar. Vuelva a ingresar");
        }
    } while (L % 2 != 1);
    int A = leerEnteroConRango("Introduzca el numero de antenas colocadas actualmente: ", 0, 500);
    //Seteamos las antenas existentes
    Antena[] antenasExistentes = new Antena[A];
    for (int i = 0; i < A; i++) {
        antenasExistentes[i] = new Antena();
        antenasExistentes[i].setF(leerEnteroConRango("Fila de la antena " + (i + 1) + ": ", 1, M - 1));
        antenasExistentes[i].setC(leerEnteroConRango("Columna de la antena " + (i + 1) + ": ", 1, N - 1));
    }
    //Inicializamos la matriz
    String[][] matriz = new String[M][N];
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            matriz[i][j] = "_";
        }
    }
    //Colocamos las antenas existentes dentro de la matriz y seteamos la 
    //cobertura de cada antena dentro de la matriz
    for (int i = 0; i < A; i++) {
        matriz[antenasExistentes[i].getF()][antenasExistentes[i].getC()] = "1";
        setearCoberturaAntena(matriz, antenasExistentes[i].getF(), antenasExistentes[i].getC(), L);
    }
 
    //Ahora mostramos la matriz de la ciudad con sus coberturas
    mostrarMatriz(matriz);
    System.out.println("\n----------------------------------------------------");
 
    //Creamos un bucle para asignar nuevas antenas. 
    //Este proceso se repetira mientras la matriz se encuentre sin cobertura total
    while (isSinCoberturaTotal(matriz)) {
        //Obtenemos una lista de antenas que le darían cobertura a puntos 
        //sin cobertura dentro de la matriz
        Antena[] antenas = getAntenasIdeales(matriz, L);
        if (antenas.length > 0) {
            //Evaluamos cual es la antena con mayor puntos sin cobertura disponibles para setearla
            Antena mayor = antenas[0];
            for (int i = 1; i < antenas.length; i++) {
                if (antenas[i].getPuntosCobertura() > mayor.getPuntosCobertura()) {
                    mayor = antenas[i];
                }
            }
            matriz[mayor.getF()][mayor.getC()] = "2";
            setearCoberturaAntena(matriz, mayor.getF(), mayor.getC(), L);
        }
        //Seteada la nueva antena con mayor puntos sin cobertura procedemos a mostrar la matriz
        mostrarMatriz(matriz);
        System.out.println("||||||||||||||||||||||||||||||||||||||||||||||||\n");
        //El proceso se repetirá hasta que no quede puntos sin cobertura dentro de la matriz
    }
    //Para terminar buscamos dentro de la matriz las antenas sugeridas por el programa
    Antena[] antenasNuevasColocar = getAntenasSugerias(matriz);
    System.out.println("Numero de antenas nuevas a colocar: " + antenasNuevasColocar.length);
    for (int i = 0; i < antenasNuevasColocar.length; i++) {
        System.out.println("Coordenadas antena nueva " + (i + 1) + ": " + antenasNuevasColocar[i].getF() + ", " + antenasNuevasColocar[i].getC());
    }
}

Paso a paso
- Se pide el número de filas y columnas, además del largo o diametro de accióin de de cada antena.
- Se pide el número de antenas colocadas y sus coordenadas.
- Se inicializa la matriz y se colocan las antenas existentes dentro de ella.
- Se inicia un bluce que evalúa cual antena se debe colocar.
+ Se obtiene una lista (arreglo) de antenas sugeridas, que tienen cierta cantidad de puntos de cobertura.
+ Se determina cual de las antenas sugeridas tiene el mayor número de puntos de cobertura.
+ Se setea la antena con mayor número de puntos de cobertura dentro de la matriz, además de su área de cobertura.
+ El proceso se repite hasta que no queden puntos sin cobertura dentro de la matriz.
- Se imprimen los resultados.

Como este es un proyecto he decidido colgarlo acá http://bit.ly/2PyeTaJ

PD: Me he sentido orgulloso de poder resolverlo XD

Consejo: colocale nombres que den una descripción mas clara de que es a tus variables, de ese modo evitas estar subiendo y bajando para saber de que se trata.
Consejo: utiliza funciones para modular el programa, así podrás probar por separado los módulos y saber si funciona.

Espero te sirva, cualquier duda escribe
Saludos
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Billy Joel
Val: 2.640
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con arreglos

Publicado por Billy Joel (777 intervenciones) el 14/12/2018 17:50:03
Me ha gustado tanto este proyecto que me puse a probarlo mas y encontré un error. Usando los datos de prueba que nos da el PDF, pero cambiando el largo (L) de 7 a 3 obtengo la siguiente salida:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
Introduzca el número de filas de la ciudad: 10
Introduzca el número de columnas de la ciudad: 10
Introduzca el largo del cuadrado que cubre una antena: 3
Introduzca el numero de antenas colocadas actualmente: 3
Fila de la antena 1: 8
Columna de la antena 1: 3
Fila de la antena 2: 5
Columna de la antena 2: 7
Fila de la antena 3: 2
Columna de la antena 3: 3
[_][_][_][_][_][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][_][_][_][_][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
 
----------------------------------------------------
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][0][2][0][_]
[_][_][0][1][0][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][_][_][_][_][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][0][2][0][_]
[_][_][0][1][0][_][0][0][0][_]
[0][0][0][0][0][_][_][_][_][_]
[0][2][0][_][_][_][0][0][0][_]
[0][0][0][_][_][_][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][0][2][0][_]
[0][0][0][1][0][_][0][0][0][_]
[0][0][0][0][0][_][_][_][_][_]
[0][2][0][_][_][_][0][0][0][_]
[0][0][0][_][_][_][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][0][2][0][_]
[0][0][0][1][0][_][0][0][0][_]
[0][0][0][0][0][0][_][_][_][_]
[0][2][0][0][2][0][0][0][0][_]
[0][0][0][0][0][0][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][0][2][0][_]
[0][0][0][1][0][_][0][0][0][_]
[0][0][0][0][0][0][_][_][_][_]
[0][2][0][0][2][0][0][0][0][_]
[0][0][0][0][0][0][0][1][0][_]
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][_][_][_][_]
[0][0][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][0][2][0][_]
[0][0][0][1][0][_][0][0][0][_]
[0][0][0][0][0][0][_][_][_][_]
[0][2][0][0][2][0][0][0][0][_]
[0][0][0][0][0][0][0][1][0][_]
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][0][2][0][_]
[0][0][0][1][0][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][2][0][_]
[0][0][0][1][0][0][0][0][0][_]
[0][0][0][0][0][0][_][_][_][_]
[0][2][0][0][2][0][0][0][0][_]
[0][0][0][0][0][0][0][1][0][_]
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][0][0][_][0][2][0][_]
[0][0][0][1][0][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][2][0][_]
[0][0][0][1][0][0][0][0][0][_]
[0][0][0][0][0][0][_][_][_][_]
[0][2][0][0][2][0][0][0][0][_]
[0][0][0][0][0][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][2][0][_]
[0][0][0][1][0][0][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][2][0][_]
[0][0][0][1][0][0][0][0][0][_]
[0][0][0][0][0][0][_][_][0][0]
[0][2][0][0][2][0][0][0][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][2][0][_]
[0][0][0][1][0][0][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][_][_][0][0]
[0][2][0][0][2][0][0][0][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][2][0][_]
[0][0][0][1][0][0][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][_][_][0][0]
[0][2][0][0][2][0][0][0][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][_][_][0][0]
[0][2][0][0][2][0][0][0][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[_][_][0][0][0][_][0][2][0][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[_][_][0][0][0][_][0][2][0][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][2][0][0][0][_][0][2][0][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][0][0][0][0][1][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
[0][0][0][1][0][0][0][0][0][0]
[0][2][0][0][2][0][0][2][0][2]
||||||||||||||||||||||||||||||||||||||||||||||||
 
Numero de antenas nuevas a colocar: 16
Coordenadas antena nueva 1: 1, 1
Coordenadas antena nueva 2: 1, 4
Coordenadas antena nueva 3: 1, 7
Coordenadas antena nueva 4: 1, 9
Coordenadas antena nueva 5: 4, 1
Coordenadas antena nueva 6: 4, 4
Coordenadas antena nueva 7: 4, 7
Coordenadas antena nueva 8: 4, 9
Coordenadas antena nueva 9: 7, 1
Coordenadas antena nueva 10: 7, 4
Coordenadas antena nueva 11: 7, 7
Coordenadas antena nueva 12: 7, 9
Coordenadas antena nueva 13: 9, 1
Coordenadas antena nueva 14: 9, 4
Coordenadas antena nueva 15: 9, 7
Coordenadas antena nueva 16: 9, 9

El programa tal como estaba, trazaba una serie de antenas ideales que le darían cobertura a toda la matriz, pero no funciona tan bien cuando hay antenas dentro dentro de la matriz, por eso lo que he hecho es evaluar cada punto sin cobertura como una posible antena, meter todas estas posibles antenas dentro de un arreglo y devolverlo. Para hacer esto se agrega el método getPotencialesAntenas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * Evalúa cada punto de la matriz como una posible antena
 * @param matriz
 * @param L
 * @return 
 */
public static Antena[] getPotencialesAntenas(String[][] matriz, int L) {
    List<Antena> antenas = new ArrayList();
    for (int i = 0; i < matriz.length; i++) {
        for (int j = 0; j < matriz[0].length; j++) {
            if (matriz[i][j].equals("_")) {
                Antena antena = new Antena(i, j);
                setTotalPuntosSinCobertura(matriz, antena, L);
                if (antena.getPuntosCobertura() > 0) {
                    antenas.add(antena);
                }
            }
 
        }
    }
    Antena[] a = new Antena[antenas.size()];
    antenas.toArray(a);
    return a;
}


Como el programa ya evaluaba cual de las posibles antenas era la que ofrecía mayor número de puntos sin cobertura, la solución fue cambiar una sola línea de código en el flujo del programa principal.
1
2
//Antena[] antenas = getAntenasIdeales(matriz, L);
Antena[] antenas = getPotencialesAntenas(matriz, L);

Con estos cambios la salida queda así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
Introduzca el número de filas de la ciudad: 10
Introduzca el número de columnas de la ciudad: 10
Introduzca el largo del cuadrado que cubre una antena: 3
Introduzca el numero de antenas colocadas actualmente: 3
Fila de la antena 1: 8
Columna de la antena 1: 3
Fila de la antena 2: 5
Columna de la antena 2: 7
Fila de la antena 3: 2
Columna de la antena 3: 3
[_][_][_][_][_][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][_][_][_][_][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
 
----------------------------------------------------
[_][_][_][_][_][0][0][0][_][_]
[_][_][0][0][0][0][2][0][_][_]
[_][_][0][1][0][0][0][0][_][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][_][_][_][_][0][1][0][_]
[_][_][_][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[_][_][_][_][_][0][0][0][_][_]
[_][_][0][0][0][0][2][0][_][_]
[_][_][0][1][0][0][0][0][_][_]
[_][_][0][0][0][_][_][_][_][_]
[0][0][0][_][_][_][0][0][0][_]
[0][2][0][_][_][_][0][1][0][_]
[0][0][0][_][_][_][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[_][_][_][_][_][0][0][0][_][_]
[_][_][0][0][0][0][2][0][_][_]
[_][_][0][1][0][0][0][0][_][_]
[_][_][0][0][0][_][_][_][_][_]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[_][_][0][0][0][_][_][_][_][_]
[_][_][0][1][0][_][_][_][_][_]
[_][_][0][0][0][_][_][_][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[_][_][_][_][_][0][0][0][_][_]
[_][_][0][0][0][0][2][0][_][_]
[_][_][0][1][0][0][0][0][_][_]
[_][_][0][0][0][_][_][_][_][_]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[_][_][0][0][0][0][0][0][_][_]
[_][_][0][1][0][0][2][0][_][_]
[_][_][0][0][0][0][0][0][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][0][0][0][_][_]
[0][2][0][0][0][0][2][0][_][_]
[0][0][0][1][0][0][0][0][_][_]
[_][_][0][0][0][_][_][_][_][_]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[_][_][0][0][0][0][0][0][_][_]
[_][_][0][1][0][0][2][0][_][_]
[_][_][0][0][0][0][0][0][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][0][0][0][_][_]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[_][_][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[_][_][0][0][0][0][0][0][_][_]
[_][_][0][1][0][0][2][0][_][_]
[_][_][0][0][0][0][0][0][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][0][0][0][_][_]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[_][_][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[0][0][0][0][0][0][0][0][_][_]
[2][0][0][1][0][0][2][0][_][_]
[0][0][0][0][0][0][0][0][_][_]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][0][0][0][_][_]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[_][_][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][_]
[0][2][0][0][2][0][0][1][0][_]
[0][0][0][0][0][0][0][0][0][_]
[0][0][0][0][0][0][0][0][0][0]
[2][0][0][1][0][0][2][0][2][0]
[0][0][0][0][0][0][0][0][0][0]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][_][_][0][0][0][_][_]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[_][_][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][1][0][2]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[2][0][0][1][0][0][2][0][2][0]
[0][0][0][0][0][0][0][0][0][0]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][2][0][0][0][0][_][_]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[_][_][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][1][0][2]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[2][0][0][1][0][0][2][0][2][0]
[0][0][0][0][0][0][0][0][0][0]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][2][0][0][0][0][2][0]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[_][_][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][1][0][2]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[2][0][0][1][0][0][2][0][2][0]
[0][0][0][0][0][0][0][0][0][0]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][2][0][0][0][0][2][0]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[2][0][0][0][0][_][_][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][1][0][2]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[2][0][0][1][0][0][2][0][2][0]
[0][0][0][0][0][0][0][0][0][0]
||||||||||||||||||||||||||||||||||||||||||||||||
 
[0][0][0][2][0][0][0][0][2][0]
[0][2][0][0][0][0][2][0][0][0]
[0][0][0][1][0][0][0][0][2][0]
[2][0][0][0][0][2][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][2][0][0][2][0][0][1][0][2]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[2][0][0][1][0][0][2][0][2][0]
[0][0][0][0][0][0][0][0][0][0]
||||||||||||||||||||||||||||||||||||||||||||||||
 
Numero de antenas nuevas a colocar: 13
Coordenadas antena nueva 1: 0, 3
Coordenadas antena nueva 2: 0, 8
Coordenadas antena nueva 3: 1, 1
Coordenadas antena nueva 4: 1, 6
Coordenadas antena nueva 5: 2, 8
Coordenadas antena nueva 6: 3, 0
Coordenadas antena nueva 7: 3, 5
Coordenadas antena nueva 8: 5, 1
Coordenadas antena nueva 9: 5, 4
Coordenadas antena nueva 10: 5, 9
Coordenadas antena nueva 11: 8, 0
Coordenadas antena nueva 12: 8, 6
Coordenadas antena nueva 13: 8, 8

Sin el cambio el programa añade 16 antenas, con el cambio el programa añade 13 antenas, una reducción de 18.75%

Para ver el código completo te dejo el link al proyecto http://bit.ly/2PyeTaJ

Saludos,
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar