import java.util.Scanner; import java.util.Stack; /** * Solución al problema: 10004 - Islas [http://acm.cs.buap.mx] * * @author BreakDark (Jhonny Monrroy) * @version 1.0b 18 feb. 2017 */ // ACETTADO!!! xD public class Main { public static void main(String[] args) { Scanner Lee; // para leer los datos de entrada int n; // dimension del mapa char[][] mapa; int i; // para los bucles // AQUI INICIA EL PROGRAMA Lee = new Scanner(System.in); do { n = Lee.nextInt(); if (n > 0) { mapa = new char[n][n]; for (i = 0; i < n; i++) { mapa[i] = Lee.next().toCharArray(); } System.out.println(obtenerSolucion(n, mapa)); } } while (Lee.hasNext() && n != 0); Lee.close(); } /** * Metodo que obtiene la solucion del problema * * @param n * Dimension del mapa * @param mapa * Matriz que representa el mapa * @return Un String que representa la solucion */ public static String obtenerSolucion(int n, char[][] mapa) { int[][] mp = new int[n][n]; // mapa de numeros // int[] dimIslas = new int[n * n]; // dimension de las islas int numIsla = 0; int i, j; // para los bucles // recorremos la matriz del mapa for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (mapa[i][j] != 'm') { // pintamos la isla if (mp[i][j] == 0) { // si no esta pintado ya Stackpila = new Stack (); pila.push(i); // introcucimos la primera coordenada pila.push(j); while (!pila.isEmpty()) { int ind_j = pila.pop(); int ind_i = pila.pop(); // System.out.println(ind_j + "," + ind_i); // buscamos los alrededores // coordenada NorOeste if (ind_i > 0 && ind_j > 0 && mapa[ind_i - 1][ind_j - 1] == 't' && mp[ind_i - 1][ind_j - 1] == 0) { pila.push(ind_i - 1); pila.push(ind_j - 1); } // coordenada Norte if (ind_i > 0 && mapa[ind_i - 1][ind_j] == 't' && mp[ind_i - 1][ind_j] == 0) { pila.push(ind_i - 1); pila.push(ind_j); } // coordenada NorEste if (ind_i > 0 && ind_j + 1 < n && mapa[ind_i - 1][ind_j + 1] == 't' && mp[ind_i - 1][ind_j + 1] == 0) { pila.push(ind_i - 1); pila.push(ind_j + 1); } // Oeste if (ind_j > 0 && mapa[ind_i][ind_j - 1] == 't' && mp[ind_i][ind_j - 1] == 0) { pila.push(ind_i); pila.push(ind_j - 1); } // coordenada Este if (ind_j + 1 < n && mapa[ind_i][ind_j + 1] == 't' && mp[ind_i][ind_j + 1] == 0) { pila.push(ind_i); pila.push(ind_j + 1); } // coordenada SurOeste if (ind_i + 1 < n && ind_j > 0 && mapa[ind_i + 1][ind_j - 1] == 't' && mp[ind_i + 1][ind_j - 1] == 0) { pila.push(ind_i + 1); pila.push(ind_j - 1); } // coordenada Sur if (ind_i + 1 < n && mapa[ind_i + 1][ind_j] == 't' && mp[ind_i + 1][ind_j] == 0) { pila.push(ind_i + 1); pila.push(ind_j); } // coordenada SurEste if (ind_i + 1 < n && ind_j + 1 < n && mapa[ind_i + 1][ind_j + 1] == 't' && mp[ind_i + 1][ind_j + 1] == 0) { pila.push(ind_i + 1); pila.push(ind_j + 1); } mp[ind_i][ind_j] = numIsla + 1; } numIsla++; } } } } // si no hay islas o solo hay una if (numIsla == 0) return "No hay islas"; if (numIsla == 1) return "Solo hay una isla"; // buscamos el menor y la mayor dimension int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE; for (int isla = 1; isla <= numIsla; isla++) { int cont = 0; for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (mp[i][j] > 0 && mp[i][j] == isla) cont++; if (cont > 0 && cont < min) min = cont; if (cont > max) max = cont; } return min + " " + max; } }
Blog dedicado a la publicación de artículos, programas propios, traducciones de Roms de Nes, super Nes y mas, y alguno que otro artículo sobre tecnologia.
Saturday, February 25, 2017
Solución al problema: 10004 - Islas [http://acm.cs.buap.mx] con Java
Para ver el link del problema Click aqui
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment