Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- class sudoku
- {
- private int[][] griglia;
- private int[][] griglia_semplificata;
- public sudoku(String filename)
- {
- griglia = new int[9][9]; //Griglia del sudoku
- File file = new File(filename);
- BufferedReader openfile;
- try
- {
- openfile=new BufferedReader(new FileReader(file));
- String line = "";
- int riga = 0;
- boolean terminate = false;
- while (true)
- {
- line = openfile.readLine();
- int colonna = 0;
- if(line == "")
- break;
- else if(line == null)
- break;
- line += "@";
- for(char a: line.toCharArray())
- {
- if(a == '|')
- {
- //Non fa niente
- }
- else if(a == '@')
- {
- riga++;
- colonna = 0;
- }
- else if(a == '-')
- {
- //Non fa niente
- break;
- }
- else if(a == '#')
- {
- terminate = true;
- break;
- }
- else
- {
- griglia[riga][colonna] = Integer.parseInt(Character.toString(a));
- colonna++;
- }
- }
- if(terminate == true)
- break;
- }
- }
- catch (IOException e)
- {
- System.out.println("--> Error: "+ e.getMessage());
- }
- }
- public boolean PresenteNumeroNellaRiga(int x, int riga)//Se il numero è presente nella riga ritorna true..
- {
- for(int a = 0;a <= 8;a++)
- {
- if(griglia_semplificata[riga][a] == x)
- return true;
- }
- return false;
- }
- public boolean PresenteNumeroNellaColonna(int x,int colonna)//Se il numero è presente nella colonna ritorna true..
- {
- for(int a = 0;a <= 8;a++)
- {
- if(griglia_semplificata[a][colonna] == x)
- return true;
- }
- return false;
- }
- public boolean PresenteNumeroNelQuadrante(int x,int riga, int colonna)//Se il numero è presente nel quadrante ritorna true..
- {
- int[] valoriDaSommareAllaRiga = new int[4];
- int[] valoriDaSommareAllaColonna = new int[4];
- valoriDaSommareAllaRiga[1]=0;
- valoriDaSommareAllaColonna[1]=0;
- if(riga == 0 || riga == 3 || riga == 6)
- {
- valoriDaSommareAllaRiga[2]= 1;
- valoriDaSommareAllaRiga[3]= 2;
- }
- if(riga == 1 || riga == 4 || riga == 7)
- {
- valoriDaSommareAllaRiga[2]= 1;
- valoriDaSommareAllaRiga[3]= -1;
- }
- if(riga == 2 || riga == 5 || riga == 8)
- {
- valoriDaSommareAllaRiga[2]= -1;
- valoriDaSommareAllaRiga[3]= -2;
- }
- if(colonna == 0 || colonna == 3 || colonna == 6)
- {
- valoriDaSommareAllaColonna[2]= 1;
- valoriDaSommareAllaColonna[3]= 2;
- }
- if(colonna == 1 || colonna == 4 || colonna == 7)
- {
- valoriDaSommareAllaColonna[2]= 1;
- valoriDaSommareAllaColonna[3]= -1;
- }
- if(colonna == 2 || colonna == 5 || colonna == 8)
- {
- valoriDaSommareAllaColonna[2]= -1;
- valoriDaSommareAllaColonna[3]= -2;
- }
- for(int a = 1; a <= 3; a++)
- {
- for(int b = 1; b <= 3; b++)
- {
- if(griglia_semplificata[riga + valoriDaSommareAllaRiga[a]] [colonna + valoriDaSommareAllaColonna[b]] == x )
- return true;
- }
- }
- return false;
- }
- public boolean semplifica()
- {
- griglia_semplificata = griglia;
- return risolvi();
- }
- public boolean risolvi()
- {
- int x = 0;//riga
- int y = 0;//colonna
- boolean spazio_libero = false;
- int numeriAggiunti = 0;
- for(int a = 0;spazio_libero == false && a <= 8;a++)
- {
- for(int b = 0;spazio_libero == false && b <= 8;b++)
- {
- if(griglia_semplificata[a][b] == 0)
- {
- spazio_libero = true;
- x = a;
- y = b;
- }
- }
- }
- if(spazio_libero == true)
- {
- for(int c = 1;c <= 9;c++)
- {
- if(!PresenteNumeroNellaRiga(c,x) && !PresenteNumeroNellaColonna(c,y) && !PresenteNumeroNelQuadrante(c,x,y))
- {
- griglia_semplificata[x][y] = c;
- numeriAggiunti++;
- if(risolvi())
- return true;
- else
- {
- griglia_semplificata[x][y] = 0;
- numeriAggiunti--;
- }
- }
- }
- if(numeriAggiunti == 0)
- return false;
- }
- else
- {
- griglia = griglia_semplificata;
- return true;
- }
- return true;
- }
- public void showSudoku()
- {
- int numero_di_colonna = 0;
- for(int a = 0;a <= 8;a++)
- {
- if(a %3 == 0 && a != 0)
- System.out.print("\n");
- for(int b = 0; b <= 8; b++)
- {
- if(b %3 == 0 && b != 0)
- System.out.print("|");
- System.out.print(griglia[a][b]);
- }
- System.out.print("\n");
- }
- }
- }
- public class dochSudoku
- {
- public static void main(String[] args)
- {
- sudoku sudo = new sudoku("provasu.txt");
- if(sudo.semplifica()){
- System.out.println("WIN, soluzione:");
- sudo.showSudoku();
- }else System.out.println("Il sudoku è irrisolvibile");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement