Faculdade Unicapital Exercicio dado em sala de Aula 4. Raposas e Galinhas Na fazenda do Sr. Buscap� existe um certo n�mero de galinhas. Enquanto elas est�o dormindo profundamente, alguns raposas famintas tentam invadir a fazenda e atacar as galinhas. Galinhas normais ficariam indefesas diante de tal amea�a, mas felizmente as galinhas do Sr. Buscap� s�o ninjas e conseguem defender-se adequadamente. A fazenda possui um formato retangular e consiste de ninhos arranjados em linhas e colunas. Cada ninho pode conter uma galinha (representada pela letra �k�), uma raposa (letra �v�), uma cerca (s�mbolo �#�) ou simplesmente estar vazio (s�mbolo �.�). Consideramos que dois ninhos pertencem a um mesmo galinheiro se podemos ir de um ninho ao outro atrav�s de um caminho formado somente com movimentos horizontais ou verticais, sem passar por uma cerca. Na fazenda podem existir ninhos vazios que n�o pertencem a nenhum galinheiro. Um ninho vazio n�o pertence a nenhum galinheiro se � poss�vel �escapar� da fazenda a partir desse ninho (ou seja, caso exista um caminho desse ninho at� a borda da fazenda). Durante a noite, as galinhas conseguem combater as raposas que est�o no mesmo galinheiro, da seguinte forma: se em um determinado galinheiro houver mais galinhas do que raposas, as galinhas sobrevivem e matam todos as raposas naquele galinheiro. Caso contr�rio, as galinhas daquele galinheiro s�o comidas pelas raposas, que sobrevivem. Note que caso um galinheiro possua o mesmo n�mero de raposas e galinhas, somente os raposas sobreviver�o, j� que raposas s�o predadores naturais, ao contr�rio de galinhas. Tarefa Escreva um programa que, dado um mapa da fazenda do Sr. Buscap� indicando a posi��o das cercas, galinhas e raposas, determine quantas galinhas e quantas raposas estar�o vivas na manh� seguinte. Entrada A entrada cont�m v�rios conjuntos de testes, que devem ser lidos de um arquivo. A primeira linha da entrada cont�m dois inteiros R e C que indicam o n�mero de linhas (3 = R = 200) e de colunas (3 = C = 200) de ninhos da fazenda. Cada uma das R linhas seguintes cont�m C caracteres, representando o conte�do do ninho localizado naquela linha e coluna (espa�o vazio, cerca, ovelha ou raposa). Sa�da Seu programa deve imprimir, na sa�da padr�o, uma �nica linha, contendo dois inteiros, sendo que o primeiro representa o n�mero de galinhas e o segundo representa o n�mero de raposas que ainda est�o vivos na manh� seguinte. Exemplo de Entrada 6 6 ...#.. .##v#. #v.#.# #.k#.#
.###.# ...### 8 8 .######. #..k...# #.####.# #.#v.#.# #.#.k#k# #k.##..# #.v..v.# .######. 9 12 .###.#####.. #.kk#...#v#. #..k#.#.#.#. #..##k#...#. #.#v#k###.#. #..#v#....#. #...v#v####. .####.#vv.k# .......##### 0 0 Sa�da 0 2 3 1 3 5 Exercicio Resolvido package raposa.e.galinha; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class GalinhaRaposa { int linha; int coluna; char fazenda[][]; int contadorGalinhas = 0; int contadorRaposas = 0; int totalGalinha = 0; int totalRaposa = 0; public static void main(String[] args) { GalinhaRaposa exe = new GalinhaRaposa(); exe.lerArquivo(); } public void lerArquivo() { File labTxt = new File("arquivo.txt"); try { Scanner leitorDeArquivo = new Scanner(labTxt); linha = leitorDeArquivo.nextInt();
coluna = leitorDeArquivo.nextInt(); fazenda = new char [linha][coluna]; String linhaDoArquivo = leitorDeArquivo.nextLine(); for(int l = 0; l < linha; l++){ linhaDoArquivo = leitorDeArquivo.nextLine(); for(int c = 0; c < coluna; c++){ fazenda[l][c] = linhaDoArquivo.charAt(c); System.out.print(fazenda[l][c]); } System.out.println(); } } catch (FileNotFoundException e) { e.printStackTrace(); } verificarGalinheiro(); } void verificarGalinheiro(){ for (int l = 0; l < linha; l++) { for (int c = 0; c < coluna ; c++) { marcarNinho(l, c); contatarSobrevivente(); } } imprima(); } void
contatarSobrevivente(){ if(contadorGalinhas > contadorRaposas){ totalGalinha += contadorGalinhas; }else { totalRaposa += contadorRaposas; } contadorGalinhas = 0; contadorRaposas = 0;
} public void marcarNinho(int l, int c) { if(l < 0 || l >= linha) return; if(c < 0 || c >= coluna) return; if(fazenda[l][c] == '#') return; if(fazenda[l][c] == 'P') return; if(fazenda[l][c] == '.') { fazenda[l][c] = 'P'; marcarNinho(l-1, c); marcarNinho(l+1, c); marcarNinho(l, c-1); marcarNinho(l, c+1); } if(fazenda[l][c] == 'k') { contadorGalinhas++; fazenda[l][c] = 'P'; marcarNinho(l-1, c); marcarNinho(l+1, c);
marcarNinho(l, c +1); marcarNinho(l, c-1);
} if(fazenda[l][c] == 'v'){ contadorRaposas++; fazenda[l][c] = 'P'; marcarNinho(l-1, c); marcarNinho(l+1, c); marcarNinho(l, c +1); marcarNinho(l, c-1); } }
}
void imprima(){ System.out.println(totalGalinha+" "+totalRaposa); for (int l = 0; l < linha; l++) { for ( int c = 0; c < coluna; c++) { System.out.print(fazenda[l][c]); } System.out.println(); } }