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

From AdonaiMedrado.Pro.Br
Revision as of 13:26, 20 May 2009 by 200.17.147.2 (Talk) (New page: <code lang="Java"> public class MatrizDoPaint { private int valorInicial; public MatrizDoPaint(){ valorInicial = 0; } public void Pintar(int[][] matriz,int colun...)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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);
   }

}