Solução: Problema da matriz do Paint (Luis Bernardo)

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
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);
 
    }
}