Guest User

Untitled

a guest
Nov 26th, 2011
836
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.73 KB | None | 0 0
  1. public class NewClass {
  2.    
  3.     static final int linhas = 6,
  4.                      colunas = 6,
  5.                      tamanhoaberta = 200,
  6.                      tamanhofechada = 200;
  7.    
  8.     public static int[][] preenchematriz (int[][] m) {
  9.        
  10.         for (int i=0; i < linhas; i++) {
  11.             for (int j=0; j < colunas; j++) {
  12.                 m[i][j] = 0;
  13.             }
  14.         }
  15.         m[2][1] = 2;
  16.         m[3][1] = 1;           
  17.         m[2][4] = 2;
  18.         m[3][4] = 2;
  19.         m[4][4] = 2;
  20.         m[3][5] = 3;
  21.         return m;
  22.        
  23.     }
  24.    
  25.     public static void imprimematriz (int[][] m) {
  26.        
  27.         for (int i=0; i< linhas; i++) {
  28.             for (int j=0; j < colunas; j++) {
  29.                 System.out.print (m[i][j]);
  30.             }
  31.             System.out.println();
  32.         }
  33.     }
  34.    
  35.     public static void atualizaposicao (int[][] m, ListaAberta[] aberta, int linha, int coluna, int posicao) {
  36.        
  37.         //Posicao uma linha abaixo
  38.         aberta[posicao] = new ListaAberta();
  39.         aberta[posicao].linha = linha + 1;
  40.         aberta[posicao].coluna = coluna;
  41.         aberta[posicao].f = obtemf(m,aberta[posicao].linha, aberta[posicao].coluna);
  42.        
  43.         //Posicao uma linha acima
  44.         aberta[posicao+1] = new ListaAberta();
  45.         aberta[posicao+1].linha = linha - 1;
  46.         aberta[posicao+1].coluna = coluna;
  47.         aberta[posicao+1].f = obtemf(m,aberta[posicao+1].linha, aberta[posicao+1].coluna);
  48.        
  49.         //Posicao uma coluna a direita
  50.         aberta[posicao+2] = new ListaAberta();
  51.         aberta[posicao+2].linha = linha;
  52.         aberta[posicao+2].coluna = coluna + 1;
  53.         aberta[posicao+2].f = obtemf(m,aberta[posicao+2].linha, aberta[posicao+2].coluna);
  54.        
  55.         //Posicao uma coluna a esquerda
  56.         aberta[posicao+3] = new ListaAberta();
  57.         aberta[posicao+3].linha = linha;
  58.         aberta[posicao+3].coluna = coluna - 1;
  59.         aberta[posicao+3].f = obtemf(m,aberta[posicao+3].linha, aberta[posicao+3].coluna);
  60.        
  61.         for (int i=posicao; i < posicao+4; i++) {
  62.             aberta[i].pailinha = linha;
  63.             aberta[i].paicoluna = coluna;
  64.         }
  65.        
  66.         aberta[0].tamanholista += 4;
  67.     }
  68.    
  69.     public static int obtemf (int[][] m, int linhapos, int colunapos) {
  70.         int contlinhas = 0,
  71.             contcolunas = 0,
  72.             //Linha e Coluna do queijo (que é o alvo)
  73.             linhaqueijo = 3,
  74.             colunaqueijo = 5;
  75.        
  76.         //Se a linha do queijo nao for a mesma da posicao
  77.         if (linhaqueijo != linhapos) {
  78.            
  79.             // Se a linha do queijo estiver acima da posicao
  80.             if (linhaqueijo > linhapos) {
  81.                 do {
  82.                     contlinhas += 1;
  83.                     linhaqueijo -= 1;
  84.                 } while (linhaqueijo > linhapos);
  85.                
  86.             // Se a linha do queijo estiver abaixo da posicao
  87.             } else {
  88.                 do {
  89.                     contlinhas += 1;
  90.                     linhaqueijo += 1;
  91.                 } while (linhaqueijo < linhapos);
  92.             }
  93.            
  94.         }
  95.        
  96.         //Se a coluna do queijo nao for a mesma da posicao
  97.         if (colunaqueijo != colunapos) {
  98.            
  99.             //Se a coluna do queijo estiver a direita posicao
  100.             if (colunaqueijo > colunapos) {
  101.                 do {
  102.                     contcolunas += 1;
  103.                     colunaqueijo -= 1;
  104.                 } while (colunaqueijo > colunapos);
  105.                
  106.             //Se a coluna do queijo estiver a esquerda da posicao
  107.             } else {
  108.                 do {
  109.                     contcolunas += 1;
  110.                     colunaqueijo += 1;
  111.                 } while (colunaqueijo < colunapos);
  112.             }
  113.         }
  114.        
  115.         //Retorna a soma da quantidade de colunas e linhas (Norte-Sul,Leste-Oeste)(H) da posicao ao Queijo
  116.         //somadas ao G(10), se fosse diagonal seria 14.
  117.                     //F = H + G
  118.         return (contcolunas + contlinhas) + 10;
  119.        
  120.     }
  121.    
  122.     public static int verificaf (ListaAberta[] aberta, int posicao, int opcao) {
  123.         //Assume que o menor f é o da posição que foi passada
  124.         int menorf = aberta[posicao].f;
  125.        
  126.         //Variável auxiliar para armazenar a posição no vetor de menor f
  127.         int aux = 0;
  128.        
  129.         for (int i=1; i < aberta[0].tamanholista; i++) {
  130.             //Varrea lista, se a posição tiver o f menor, aux recebe a posição
  131.             if (aberta[i].f < menorf) {
  132.                 aux = i;
  133.             }
  134.         }
  135.  
  136.         // Se a opcao foi 1, retorna a linha da posicao com menor f
  137.         if (opcao == 1) {
  138.             return aberta[aux].linha;
  139.            
  140.         // Se não, retorna a coluna da posição com menor f
  141.         } else {
  142.             return aberta[aux].coluna;
  143.         }
  144.        
  145.     }
  146.    
  147.     public static void main (String[] args) {
  148.        
  149.         int[][] matriz = new int[linhas][colunas];
  150.         ListaAberta[] laberta = new ListaAberta[tamanhoaberta];
  151.         ListaFechada[] lfechada = new ListaFechada[tamanhofechada];
  152.         int poslinha = 3, poscoluna = 1, posicao=1;
  153.        
  154.         preenchematriz(matriz);
  155.        
  156.         //Posicao inicial (RATO)
  157.         laberta[0] = new ListaAberta();
  158.         laberta[0].linha = 3;
  159.         laberta[0].coluna = 1;
  160.         laberta[0].tamanholista = 1;
  161.                      
  162.         //Passa a lista, a posicao do rato e a posicao no vetor
  163.         atualizaposicao(matriz,laberta,poslinha,poscoluna,posicao);
  164.        
  165.         poslinha = verificaf (laberta,posicao,1);
  166.         poscoluna = verificaf(laberta,posicao,2);
  167.        
  168.         imprimematriz(matriz);
  169.        
  170.     }
  171.    
  172. }
  173.  
Advertisement
Add Comment
Please, Sign In to add comment