package projet; import java.util.Scanner; public class Sudoku{ //fonction principale public static void main(String args[]){ int[][] tabInit = new int[9][9], tableauModifie = new int[9][9]; int[] caseSuivante; int tps,i,j,k; String modif2; char modif; AffichageSudoku AS; boolean impossible; //initialisation à 0 du tableau initiale et du tableau à modifier for (i=0; i<9; i++){ for (j=0; j<9; j++){ tabInit[i][j]= 0; tableauModifie[i][j]= 0; } } //entrée des coordonnés et de la valeur des cases de la grille modif='Y'; while(modif=='Y'||modif=='y'){ System.out.println("Voulez vous entrer les coordonees d'une case a modifier?(Y/N) "); modif2=new Scanner(System.in).nextLine(); modif=modif2.charAt(0); if(modif=='Y'||modif=='N'||modif=='y'||modif=='n'){ if(modif=='Y'||modif=='y'){ impossible = true; i=0;j=0;k=0; while(i<1||i>10){ System.out.println("Entrez la ligne de la case a modifier "); i=(new Scanner(System.in)).nextInt(); } while(j<1||j>10){ System.out.println("Entrez la colonne de la case a modifier "); j=(new Scanner(System.in)).nextInt(); } while((k<1||k>9)&&impossible){ System.out.println("Entrez la nouvelle valeur de la case a modifier "); k=(new Scanner(System.in)).nextInt(); if(chiffrePossible(k,i-1,j-1,tableauModifie)){ impossible=false; } } tabInit[i-1][j-1]= k; tableauModifie[i-1][j-1]= k; } } else{ modif='Y'; } } AS = new AffichageSudoku(tableauModifie,tabInit,1); resolution(0,0,tableauModifie,tabInit,AS); AS.afficheGagne(); } //fonction de verification de ligne public static boolean verifLigne(int i,int[][] tableauModifie){ int j = 0,un=0,deux=0,trois=0,quatre=0,cinq=0,six=0,sept=0,huit=0,neuf=0; for(j=0;j<9;j++){ if(tableauModifie[i][j]==0){ return false; } else{ if(tableauModifie[i][j]==1){ un = un + 1; } else{ if(tableauModifie[i][j]==2){ deux = deux + 1; } else{ if(tableauModifie[i][j]==3){ trois = trois + 1; } else{ if(tableauModifie[i][j]==4){ quatre = quatre + 1; } else{ if(tableauModifie[i][j]==5){ cinq = cinq + 1; } else{ if(tableauModifie[i][j]==6){ six = six + 1; } else{ if(tableauModifie[i][j]==7){ sept = sept + 1; } else{ if(tableauModifie[i][j]==8){ huit = huit + 1; } else{ if(tableauModifie[i][j]==9){ neuf = neuf + 1; } } } } } } } } } } } if(un == 1 && deux == 1 && trois == 1 && quatre == 1 && cinq == 1 && six == 1 && sept == 1 && huit == 1 && neuf == 1){ return true; } else{ return false; } } //verification de colonne public static boolean verifColonne(int j,int[][] tableauModifie){ int i = 0,un=0,deux=0,trois=0,quatre=0,cinq=0,six=0,sept=0,huit=0,neuf=0; for(i=0;i<9;i++){ if(tableauModifie[i][j]==0){ return false; } else{ if(tableauModifie[i][j]==1){ un = un + 1; } else{ if(tableauModifie[i][j]==2){ deux = deux + 1; } else{ if(tableauModifie[i][j]==3){ trois = trois + 1; } else{ if(tableauModifie[i][j]==4){ quatre = quatre + 1; } else{ if(tableauModifie[i][j]==5){ cinq = cinq + 1; } else{ if(tableauModifie[i][j]==6){ six = six + 1; } else{ if(tableauModifie[i][j]==7){ sept = sept + 1; } else{ if(tableauModifie[i][j]==8){ huit = huit + 1; } else{ if(tableauModifie[i][j]==9){ neuf = neuf + 1; } } } } } } } } } } } if(un == 1 && deux == 1 && trois == 1 && quatre == 1 && cinq == 1 && six == 1 && sept == 1 && huit == 1 && neuf == 1){ return true; } else{ return false; } } //verification carré public static boolean verifCarre(int i,int j, int[][] tableauModifie){ int a = 0,b = 0,k,l,un=0,deux=0,trois=0,quatre=0,cinq=0,six=0,sept=0,huit=0,neuf=0; if(i==3){ a = a + 3; } if(i==6){ a = a + 6; } if(j==3){ b = b + 3; } if(j==6){ b = b+ 6; } for(k=a;k<(a+3);k++){ for(l=b;l<(b+3);l++){ if(tableauModifie[k][l]==0){ return false; } else{ if(tableauModifie[k][l]==1){ un = un + 1; } else{ if(tableauModifie[k][l]==2){ deux = deux + 1; } else{ if(tableauModifie[k][l]==3){ trois = trois + 1; } else{ if(tableauModifie[k][l]==4){ quatre = quatre + 1; } else{ if(tableauModifie[k][l]==5){ cinq = cinq + 1; } else{ if(tableauModifie[k][l]==6){ six = six + 1; } else{ if(tableauModifie[k][l]==7){ sept = sept + 1; } else{ if(tableauModifie[k][l]==8){ huit = huit + 1; } else{ if(tableauModifie[k][l]==9){ neuf = neuf + 1; } } } } } } } } } } } } if(un == 1 && deux == 1 && trois == 1 && quatre == 1 && cinq == 1 && six == 1 && sept == 1 && huit == 1 && neuf == 1){ return true; } else{ return false; } } //verification tableau public static boolean verifTableau(int[][] tableauModifie){ if(verifLigne(0,tableauModifie)&&verifLigne(1,tableauModifie)&verifLigne(2,tableauModifie)&&verifLigne(3,tableauModifie)&&verifLigne(4,tableauModifie)&&verifLigne(5,tableauModifie)&&verifLigne(6,tableauModifie)&&verifLigne(7,tableauModifie)&&verifLigne(8,tableauModifie)&&verifColonne(0,tableauModifie)&&verifColonne(1,tableauModifie)&&verifColonne(2,tableauModifie)&&verifColonne(3,tableauModifie)&&verifColonne(4,tableauModifie)&&verifColonne(5,tableauModifie)&&verifColonne(6,tableauModifie)&&verifColonne(7,tableauModifie)&&verifColonne(8,tableauModifie)&&verifCarre(0,0,tableauModifie)&&verifCarre(0,3,tableauModifie)&&verifCarre(0,6,tableauModifie)&&verifCarre(3,0,tableauModifie)&&verifCarre(3,3,tableauModifie)&&verifCarre(3,6,tableauModifie)&&verifCarre(6,0,tableauModifie)&&verifCarre(6,3,tableauModifie)&&verifCarre(6,6,tableauModifie)){ return true; } else{ return false; } } //chiffre dans la ligne public static boolean chiffreDansLigne(int k,int i,int[][] tableauModifie){ boolean present=false; for(int j=0;j<9 && !present;j++){ if(tableauModifie[i][j]==k){ present=true; } } return present; } //chiffre dans la colonne public static boolean chiffreDansColonne(int k,int j,int[][] tableauModifie){ boolean present=false; for(int i=0;i<9;i++){ if(tableauModifie[i][j]==k){ present=true; } } return present; } //chiffre dans le carré public static boolean chiffreDansCarre(int k,int i,int j,int[][] tableauModifie){ int a = 0,b = 0,l,m; boolean present = false; if(i>=3&&i<6){ a = a + 3; } if(i>=6){ a = a + 6; } if(j>=3&&j<6){ b = b + 3; } if(j>=6){ b = b+ 6; } for(l=a;l