Solução: Problema da matriz do Paint (Luis Bernardo)
From AdonaiMedrado.Pro.Br
public class MatrizDoPaint { private int valorInicial; public MatrizDoPaint(){ valorInicial = 0; } public void Pintar(int[][] matriz,int coluna,int linha,int novoValor){ if(dentroLimites(matriz, coluna, linha)){ valorInicial = matriz[linha][coluna]; if(valorInicial!= novoValor){ pintarRestantes(matriz,coluna,linha,novoValor); } } } //Percorre a matriz semelhante a rosa dos ventos private void pintarRestantes(int[][] matriz, int coluna, int linha, int novoValor) { if(dentroLimites(matriz, coluna, linha)){ int valorPosicao = matriz[linha][coluna]; if(valorPosicao==valorInicial){ matriz[linha][coluna] = novoValor; //Frente pintarRestantes(matriz, coluna+1, linha, novoValor); //Tras pintarRestantes(matriz, coluna-1, linha, novoValor); //Cima pintarRestantes(matriz, coluna, linha-1, novoValor); //Baixo pintarRestantes(matriz, coluna, linha+1, novoValor); //Diagonal Superior esquerda pintarRestantes(matriz, coluna-1, linha-1, novoValor); //Diagonal Inferior esquerda pintarRestantes(matriz, coluna-1, linha+1, novoValor); //Diagonal Superior direita pintarRestantes(matriz, coluna+1, linha-1, novoValor); //Diagonal Inferior direita pintarRestantes(matriz, coluna+1, linha+1, novoValor); } } } //Dentro Limites considera que a matriz do problema sera quadrada private boolean dentroLimites(int[][] matriz,int x, int y){ if((x>=0)&&(x<matriz[0].length)){ if((y>=0)&&(y<matriz.length)){ return true; } else{ return false; } }else{ return false; } } public void exibeMatriz(int[][] matriz) { for(int i = 0; i< matriz.length; i++){ if(i==0) System.out.print("{ "); for(int j = 0; j<matriz[i].length; j++){ if(j==0) System.out.print("{"+matriz[i][j]+","); if(j==(matriz[i].length-1)&&(i!=(matriz.length-1) )) System.out.print(matriz[i][j]+"},"); if((j>0)&&(j<(matriz.length-1))) System.out.print(matriz[i][j]+","); if(j==(matriz[i].length-1)&&(i==(matriz.length-1) )) System.out.print(matriz[i][j]+"}"); } if((i>=0)&&(i<(matriz[i].length-1))) System.out.print("\n "); } System.out.print("}\n"); } } public class MainPaint { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here MatrizDoPaint mat = new MatrizDoPaint(); int [][] matriz= {{1, 1, 3, 0, 0, 0, 1}, {0, 0, 1, 2, 0, 1, 0}, {0, 0, 1, 0, 1, 0, 1}, {9, 6, 3, 1, 0, 1, 0}, {6, 2, 4, 7, 1, 0, 1}, {0, 0, 0, 0, 0, 0, 1}, {0, 1, 9, 6, 0, 1, 0} }; mat.Pintar(matriz ,0,0,2); mat.exibeMatriz(matriz); } }