(UVA) 10653 - Bombs! NO they are Mines!! - Solução
import java.io.*;
import java.util.*;
class Main {
class Posicao {
public Posicao (int l, int c) {
linha = l;
coluna = c;
}
int linha;
int coluna;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0);
}
static int leitor(BufferedReader br) throws NumberFormatException, IOException {
int n;
int resp = 0;
while (true) {
n = br.read();
if (n >= '0' && n <= '9') {
break;
}
}
while (true) {
resp = resp*10 + n-'0';
n = br.read();
if (n < '0' || n > '9') {
break;
}
}
return resp;
}
int busca(char[][] mapa, Posicao inicio, Posicao fim, int linha, int coluna) {
int[][] matrizVisitados = new int[linha][coluna];
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
matrizVisitados[i][j] = -1;
}
}
ArrayList<Posicao> filaVisitados = new ArrayList<Posicao>();
filaVisitados.add(new Posicao(inicio.linha, inicio.coluna));
// marque s
matrizVisitados[inicio.linha][inicio.coluna] = 0;
int[] ladosLinha = {1,-1,0,0};
int[] ladosColuna = {0,0,1,-1};
int contador = 0;
int lin = 0;
int col = 0;
int resposta = 0;
while (filaVisitados.size() != contador) {
if (filaVisitados.get(contador).linha == fim.linha && filaVisitados.get(contador).coluna == fim.coluna) {
resposta = matrizVisitados[filaVisitados.get(contador).linha][filaVisitados.get(contador).coluna];
break;
}
for (int j = 0; j < 4; j++) {
lin = filaVisitados.get(contador).linha + ladosLinha[j];
col = filaVisitados.get(contador).coluna + ladosColuna[j];
if (lin >= 0 && lin < linha && col >= 0 && col < coluna && matrizVisitados[lin][col] == -1 && mapa[lin][col] != '#') {
int lin2 = filaVisitados.get(contador).linha;
int col2 = filaVisitados.get(contador).coluna;
matrizVisitados[lin][col] = matrizVisitados[lin2][col2]+1;
resposta = matrizVisitados[lin][col];
filaVisitados.add(new Posicao(lin, col));
}
}
contador++;
}
return resposta;
}
void processa() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int linha = leitor(br);
int coluna = leitor(br);
while(linha != 0 || coluna != 0) {
int linhasComBomba = leitor(br);
char[][] mapa = new char[linha][coluna];
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
mapa[i][j] = '0';
}
}
for (int i = 0; i < linhasComBomba; i++) {
int numDaLinha = leitor(br);
int qteBombas = leitor(br);
for (int j = 0; j < qteBombas; j++) {
int colunaDaBomba = leitor(br);
mapa[numDaLinha][colunaDaBomba] = '#';
}
}
int lin = leitor(br);
int col = leitor(br);
Posicao inicio = new Posicao(lin, col);
lin = leitor(br);
col = leitor(br);
Posicao fim = new Posicao(lin, col);
int resposta = busca(mapa, inicio, fim, linha, coluna);
bw.write(resposta+"\n");
linha = leitor(br);
coluna = leitor(br);
}
bw.flush();
bw.close();
return;
}
}
import java.util.*;
class Main {
class Posicao {
public Posicao (int l, int c) {
linha = l;
coluna = c;
}
int linha;
int coluna;
}
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.processa();
System.exit(0);
}
static int leitor(BufferedReader br) throws NumberFormatException, IOException {
int n;
int resp = 0;
while (true) {
n = br.read();
if (n >= '0' && n <= '9') {
break;
}
}
while (true) {
resp = resp*10 + n-'0';
n = br.read();
if (n < '0' || n > '9') {
break;
}
}
return resp;
}
int busca(char[][] mapa, Posicao inicio, Posicao fim, int linha, int coluna) {
int[][] matrizVisitados = new int[linha][coluna];
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
matrizVisitados[i][j] = -1;
}
}
ArrayList<Posicao> filaVisitados = new ArrayList<Posicao>();
filaVisitados.add(new Posicao(inicio.linha, inicio.coluna));
// marque s
matrizVisitados[inicio.linha][inicio.coluna] = 0;
int[] ladosLinha = {1,-1,0,0};
int[] ladosColuna = {0,0,1,-1};
int contador = 0;
int lin = 0;
int col = 0;
int resposta = 0;
while (filaVisitados.size() != contador) {
if (filaVisitados.get(contador).linha == fim.linha && filaVisitados.get(contador).coluna == fim.coluna) {
resposta = matrizVisitados[filaVisitados.get(contador).linha][filaVisitados.get(contador).coluna];
break;
}
for (int j = 0; j < 4; j++) {
lin = filaVisitados.get(contador).linha + ladosLinha[j];
col = filaVisitados.get(contador).coluna + ladosColuna[j];
if (lin >= 0 && lin < linha && col >= 0 && col < coluna && matrizVisitados[lin][col] == -1 && mapa[lin][col] != '#') {
int lin2 = filaVisitados.get(contador).linha;
int col2 = filaVisitados.get(contador).coluna;
matrizVisitados[lin][col] = matrizVisitados[lin2][col2]+1;
resposta = matrizVisitados[lin][col];
filaVisitados.add(new Posicao(lin, col));
}
}
contador++;
}
return resposta;
}
void processa() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int linha = leitor(br);
int coluna = leitor(br);
while(linha != 0 || coluna != 0) {
int linhasComBomba = leitor(br);
char[][] mapa = new char[linha][coluna];
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
mapa[i][j] = '0';
}
}
for (int i = 0; i < linhasComBomba; i++) {
int numDaLinha = leitor(br);
int qteBombas = leitor(br);
for (int j = 0; j < qteBombas; j++) {
int colunaDaBomba = leitor(br);
mapa[numDaLinha][colunaDaBomba] = '#';
}
}
int lin = leitor(br);
int col = leitor(br);
Posicao inicio = new Posicao(lin, col);
lin = leitor(br);
col = leitor(br);
Posicao fim = new Posicao(lin, col);
int resposta = busca(mapa, inicio, fim, linha, coluna);
bw.write(resposta+"\n");
linha = leitor(br);
coluna = leitor(br);
}
bw.flush();
bw.close();
return;
}
}
Comments
Post a Comment