2017-03-01 2 views
-1

Ich habe ein Programm in Java, die überprüfen, ob ein Sudoku gültig ist oder nicht, ich habe zwei Methoden, die erste ist die Summe aller Spalten, Untergitter, Zeilen und sagen, ob 45 ist, und die Zweitens ist zu prüfen, ob die Summe aller Sudoku 405 ist oder nicht, wenn ja, also ist das Sudoku gültig, also suche ich nach einem Gegenbeispiel, dass ich in der Eingabe ein gültiges Sudoku habe, aber das Programm sagt, das ist nicht gültig, also dies ist der Code:Sudoku Lösung Checker

public class test_checker { 
    static final boolean valide=true; 
    static final boolean non_valide=false; 

    // verify every sub-grid if it is valid 
     static boolean check_subgrid(int a[][],int ei,int ej){ 
      int sum=0; 
      for(int i=ei;i<ei+3;i++){   
       for(int j=ej;j<ej+3;j++){ 
        sum=sum+a[j][i]; 
       } 
      } 
      if(sum!=45) return non_valide; 
      else return valide; 
     } 
     //verify a sudoku by sum of every row & column & sub-grid 
     static boolean Checker1(int a[][]){ 
      int sum=0; 
      //check row 
      for(int i=0;i<9;i++){ 
       sum=0; 
       for(int j=0;j<9;j++){ 
        sum=sum+a[i][j]; 
       } 
       if(sum!=45) return non_valide; 

      } 
      //check column 
      for(int i=0;i<9;i++){ 
       sum=0; 
       for(int j=0;j<9;j++){ 
        sum=sum+a[j][i]; 
       } 
       if(sum!=45) return non_valide; 
      }  
      //check sub-grid 
      for(int i=0;i<9;i=i+3){ 
       for(int j=0;j<3;j=j+3){ 
        if(check_subgrid(a,i,j)==non_valide) return non_valide; 
       } 
      } 
      return valide; 
     } 
     //verify by sum of all sudoku 
     static boolean Checker2(int a[][]){ 
      int sum=0; 
      for(int i=0;i<9;i++){   
       for(int j=0;j<9;j++){ 
        sum=sum+a[i][j]; 
       } 
      } 
      if(sum!=405) return non_valide; 
      else return valide; 
     } 


    public static void main(String[] args) { 
     int [][] sudoku = 
      { 
       {1,2,3,4,5,6,7,8,9}, 
       {4,5,6,7,8,9,1,2,3}, 
       {7,8,9,1,2,3,4,5,6}, 
       {3,1,2,9,7,8,6,4,5}, 
       {6,4,5,3,1,2,9,7,8}, 
       {9,7,8,6,4,5,3,1,2}, 
       {2,3,1,5,6,4,8,9,7}, 
       {5,6,4,8,9,7,2,3,1}, 
       {8,9,7,2,3,1,5,6,4} 
      }; 
     if(Checker1(sudoku)) System.out.println("it's valide (checker1)!"); 
     else System.out.println("it's not valide !"); 
     if(Checker2(sudoku)) System.out.println("it's valide (checker2) !"); 
     else System.out.println("it's not valide !"); 

    } 

} 
+0

Sie nicht die Summe der Zahlen überprüfen sollen, weil es falsch positive Ergebnisse haben kann (wiederholte Zahlen, die auch 45 addiert). Sie sollten überprüfen, ob sich die Zahlen nicht wiederholen. –

+0

Ist diese Frage für http://codereview.stackexchange.com besser geeignet? – Paul

+5

Natürlich gibt es kein gültiges 9x9 Sudoku, das Ihren Kriterien nicht entspricht. Es folgt direkt aus der Definition eines gültigen Sudokus. Die Frage, die Sie * fragen sollten, ist, ob es ein *** ungültiges *** 9 mal 9 Gitter gibt, das *** *** *** *** Ihren Kriterien entspricht. –

Antwort

2

Wie @John Bollinger sagte

Sie stellen sollten, ist, ob es eine ungültige 9 von 9-Gitter ist, dass erfüllt dennoch Ihre Kriterien.

Die einfachsten 2 Fälle, die mir in den Sinn kommt, sind:

{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5}, 
{5,5,5,5,5,5,5,5,5} 

und Ihrem Beispiel, wo Sie 0'en setzen würde anstelle von 1en und 10er statt 9 Jahren. Stellen Sie sicher, dass jedes Feld in Zeilen, Spalten und Unterrastern unterschiedlich ist und sich im Intervall von [1,9] befindet.

1

Für checker2 können Sie einfach zwei Werte von zwei Zeilen invertieren. Hier invertiert I 4 und 1 der ersten und zweiten Reihe, offensichtlich ist es ein ungültiges sudoku, aber checker2 gibt Ihnen ein positives Ergebnis

  {4,2,3,4,5,6,7,8,9}, 
      {1,5,6,7,8,9,1,2,3}, 
      {7,8,9,1,2,3,4,5,6}, 
      {3,1,2,9,7,8,6,4,5}, 
      {6,4,5,3,1,2,9,7,8}, 
      {9,7,8,6,4,5,3,1,2}, 
      {2,3,1,5,6,4,8,9,7}, 
      {5,6,4,8,9,7,2,3,1}, 
      {8,9,7,2,3,1,5,6,4}