数独解答检查器

我有一个用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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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