(UVA) 572 - Oil Deposits - Solução
import java.io.*;
import java.util.*;
class Main {
class Posicao {
public Posicao(int l, int c) {
linha = l;
coluna = c;
}
public int linha;
public int coluna;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0);
}
int[][] busca(char[][] mapa, ArrayList<Posicao> filaVisitar, int pontoPartidaL, int pontoPartidaC, int numLinhas, int numColunas) {
int[][] matriz = new int[numLinhas][numColunas];
for (int i = 0; i < numLinhas; i++) {
for (int j = 0; j < numColunas; j++) {
matriz[i][j] = 0;
}
}
int lin = 0;
int col = 0;
ArrayList<Posicao> filaVisitados = new ArrayList<Posicao>();
filaVisitados.add(new Posicao(pontoPartidaL, pontoPartidaC));
int[] vetorLinha = {0,0,+1,-1,-1,+1,-1,+1,0};
int[] vetorColuna = {-1,+1,0,0,-1,-1,+1,+1,0};
int inicioFila = 0;
int contador = 1;
int contador2 = 0;
boolean incrementou = false;
while (filaVisitados.size() != inicioFila) {
lin = filaVisitados.get(inicioFila).linha;
col = filaVisitados.get(inicioFila).coluna;
for (int i = 0; i < 9; i++) {
int nLinha = lin+vetorLinha[i];
int nColuna = col+vetorColuna[i];
if (nLinha >= 0 && nLinha < numLinhas && nColuna >= 0 && nColuna < numColunas) {
if (matriz[nLinha][nColuna] == 0) {
if (mapa[nLinha][nColuna] == '@') {
incrementou = true;
matriz[nLinha][nColuna] = contador;
filaVisitados.add(new Posicao(nLinha, nColuna));
}
}
}
}
inicioFila++;
if (filaVisitar.size() > 0 && contador2 < filaVisitar.size() && filaVisitados.size() == inicioFila) {
filaVisitados.add(filaVisitar.get(contador2));
if (incrementou) {
contador++;
incrementou = false;
}
contador2++;
}
}
return matriz;
}
void processa() throws NumberFormatException, IOException {
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((line = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line);
int numLinhas = Integer.valueOf(tokenizer.nextToken());
int numColunas = Integer.valueOf(tokenizer.nextToken());
if (numLinhas == 0 && numColunas == 0) {
return;
}
char[][] mapa = new char[numLinhas][numColunas];
int pontoPartidaL = 0;
int pontoPartidaC = 0;
ArrayList<Posicao> filaVisitar = new ArrayList<Posicao>();
for (int j = 0; j < numLinhas; j++) {
line = br.readLine();
for (int k = 0; k < numColunas; k++) {
mapa[j][k] = line.charAt(k);
if (mapa[j][k] == '@') {
pontoPartidaL = j;
pontoPartidaC = k;
filaVisitar.add(new Posicao(pontoPartidaL, pontoPartidaC));
}
}
}
int[][] resposta = busca(mapa, filaVisitar, pontoPartidaL, pontoPartidaC, numLinhas, numColunas);
int maior = 0;
for (int j = 0; j < numLinhas; j++) {
for (int k = 0; k < numColunas; k++) {
if (resposta[j][k] > maior) {
maior = resposta[j][k];
}
}
}
System.out.println(maior);
}
return;
}
}
import java.util.*;
class Main {
class Posicao {
public Posicao(int l, int c) {
linha = l;
coluna = c;
}
public int linha;
public int coluna;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0);
}
int[][] busca(char[][] mapa, ArrayList<Posicao> filaVisitar, int pontoPartidaL, int pontoPartidaC, int numLinhas, int numColunas) {
int[][] matriz = new int[numLinhas][numColunas];
for (int i = 0; i < numLinhas; i++) {
for (int j = 0; j < numColunas; j++) {
matriz[i][j] = 0;
}
}
int lin = 0;
int col = 0;
ArrayList<Posicao> filaVisitados = new ArrayList<Posicao>();
filaVisitados.add(new Posicao(pontoPartidaL, pontoPartidaC));
int[] vetorLinha = {0,0,+1,-1,-1,+1,-1,+1,0};
int[] vetorColuna = {-1,+1,0,0,-1,-1,+1,+1,0};
int inicioFila = 0;
int contador = 1;
int contador2 = 0;
boolean incrementou = false;
while (filaVisitados.size() != inicioFila) {
lin = filaVisitados.get(inicioFila).linha;
col = filaVisitados.get(inicioFila).coluna;
for (int i = 0; i < 9; i++) {
int nLinha = lin+vetorLinha[i];
int nColuna = col+vetorColuna[i];
if (nLinha >= 0 && nLinha < numLinhas && nColuna >= 0 && nColuna < numColunas) {
if (matriz[nLinha][nColuna] == 0) {
if (mapa[nLinha][nColuna] == '@') {
incrementou = true;
matriz[nLinha][nColuna] = contador;
filaVisitados.add(new Posicao(nLinha, nColuna));
}
}
}
}
inicioFila++;
if (filaVisitar.size() > 0 && contador2 < filaVisitar.size() && filaVisitados.size() == inicioFila) {
filaVisitados.add(filaVisitar.get(contador2));
if (incrementou) {
contador++;
incrementou = false;
}
contador2++;
}
}
return matriz;
}
void processa() throws NumberFormatException, IOException {
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((line = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line);
int numLinhas = Integer.valueOf(tokenizer.nextToken());
int numColunas = Integer.valueOf(tokenizer.nextToken());
if (numLinhas == 0 && numColunas == 0) {
return;
}
char[][] mapa = new char[numLinhas][numColunas];
int pontoPartidaL = 0;
int pontoPartidaC = 0;
ArrayList<Posicao> filaVisitar = new ArrayList<Posicao>();
for (int j = 0; j < numLinhas; j++) {
line = br.readLine();
for (int k = 0; k < numColunas; k++) {
mapa[j][k] = line.charAt(k);
if (mapa[j][k] == '@') {
pontoPartidaL = j;
pontoPartidaC = k;
filaVisitar.add(new Posicao(pontoPartidaL, pontoPartidaC));
}
}
}
int[][] resposta = busca(mapa, filaVisitar, pontoPartidaL, pontoPartidaC, numLinhas, numColunas);
int maior = 0;
for (int j = 0; j < numLinhas; j++) {
for (int k = 0; k < numColunas; k++) {
if (resposta[j][k] > maior) {
maior = resposta[j][k];
}
}
}
System.out.println(maior);
}
return;
}
}
Comments
Post a Comment