Advertisement
Guest User

SUDOKUSolver

a guest
Nov 21st, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.00 KB | None | 0 0
  1. package backtracking;
  2.  
  3. public class SudokuSolver {
  4.    
  5.     public static boolean estaNaLinha(int [] [] tab, int linha, int num){
  6.        for(int coluna = 0; coluna < 9; coluna++)
  7.            if(tab[linha][coluna] == num){
  8.                return false;
  9.            }
  10.        return true;
  11.     }
  12.    
  13.     public static boolean estaNaColuna(int [] [] tab, int coluna, int num){
  14.         for(int linha = 0; linha < 9; linha++)
  15.             if(tab[linha][coluna] == num){
  16.                 return false;
  17.             }
  18.         return true;
  19.     }
  20.    
  21.     public static boolean estaNaMatriz(int [] [] tab, int linha, int coluna, int num){
  22.         linha = (linha/3) * 3;
  23.         coluna = (coluna/3) * 3;
  24.        
  25.         for(int i = 0; i < 3; i++)
  26.             for(int j = 0; j < 3; j++)
  27.                 if(tab[linha + i][coluna + j] == num)
  28.                     return false;
  29.         return true;
  30.     }
  31.    
  32.     public static boolean naoEhCandidato(int [] [] tab, int linha, int coluna, int num){
  33.         return estaNaLinha(tab,linha,num) && estaNaColuna(tab,coluna,num) && estaNaMatriz(tab,linha,coluna,num);
  34.     }
  35.    
  36.    
  37.    
  38.     public static boolean solveSudoku(int [] [] tab, int linha, int coluna){
  39.         if(linha == 9){
  40.             linha = 0;
  41.             if(++coluna == 9){
  42.                 return true;
  43.             }
  44.         }
  45.        
  46.         else if (tab[linha][coluna] != 0)
  47.            return solveSudoku(tab,linha + 1,coluna);
  48.        
  49.        
  50.         for(int num = 1; num < 10; num++){
  51.             if(naoEhCandidato(tab,linha,coluna,num)){
  52.                 tab[linha][coluna] = num;
  53.                 if(solveSudoku(tab, linha + 1, coluna))
  54.                     return true;
  55.                 }
  56.             }
  57.        
  58.         tab[linha][coluna] = 0;
  59.         return false;
  60.     }
  61.    
  62.     public static void imprime(int [] [] tab){
  63.         for(int i = 0; i < 9; i++){
  64.             System.out.println(" ");
  65.             for(int j = 0; j < 9; j++)
  66.                 System.out.print(tab[i][j] + " ");
  67.         }
  68.     }
  69.                      
  70.     public static void main (String [] args){
  71.         int model [] [] = new int[9][9];
  72.        
  73.       model[0][0] = 9 ;
  74.       model[0][4] = 2 ;
  75.       model[0][6] = 7 ;
  76.       model[0][7] = 5 ;
  77.  
  78.       model[1][0] = 6 ;
  79.       model[1][4] = 5 ;
  80.       model[1][7] = 4 ;
  81.  
  82.       model[2][1] = 2 ;
  83.       model[2][3] = 4 ;
  84.       model[2][7] = 1 ;
  85.  
  86.       model[3][0] = 2 ;
  87.       model[3][2] = 8 ;
  88.  
  89.       model[4][1] = 7 ;
  90.       model[4][3] = 5 ;
  91.       model[4][5] = 9 ;
  92.       model[4][7] = 6 ;
  93.  
  94.       model[5][6] = 4 ;
  95.       model[5][8] = 1 ;
  96.  
  97.       model[6][1] = 1 ;
  98.       model[6][5] = 5 ;
  99.       model[6][7] = 8 ;
  100.  
  101.       model[7][1] = 9 ;
  102.       model[7][4] = 7 ;
  103.       model[7][8] = 4 ;
  104.  
  105.       model[8][1] = 8 ;
  106.       model[8][2] = 2 ;
  107.       model[8][4] = 4 ;
  108.       model[8][8] = 6 ;
  109.      
  110.       imprime(model);
  111.      
  112.       System.out.println(" ");
  113.        
  114.       solveSudoku(model,0,0);
  115.      
  116.       imprime(model);
  117.        
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement