数独解答检查器

我有一个用Java编写的程序,用于检查一个数独是否有效。我有两个方法,第一个方法是检查所有列、子网格和行的总和是否为45,第二个方法是检查整个数独的总和是否为405,如果是,则数独有效。我正在寻找一个反例,即输入一个有效的数独,但程序却判定其无效。以下是代码:

public class test_checker {    static final boolean valide=true;    static final boolean non_valide=false;    // 验证每个子网格是否有效        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;        }        //通过每行、每列和每个子网格的总和验证数独        static boolean Checker1(int a[][]){            int sum=0;            //检查行            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;            }            //检查列            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;            }                   //检查子网格            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;        }        //通过整个数独的总和验证        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 !");    }}

回答:

正如@某人所说

你应该问的是是否存在一个无效的9×9网格,但它仍然满足你的标准。

我想到的最简单的两个例子是:

{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}

以及你的例子,你可以用0代替1,用10代替9。确保每个字段在行、列和子网格中都是不同的,并且在[1,9]的区间内。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注