gpt4 book ai didi

Java 数独解算器不更改空单元格

转载 作者:行者123 更新时间:2023-12-02 07:51:36 25 4
gpt4 key购买 nike

我正在编写一个数独解算器(仍然需要编写方框检查并实际完成程序),但据我所知,我正在测试它。我现在正在测试的难题“非常简单”,因为任何行/列中只有一个空单元格。该谜题以“空”单元格为零开始。我的问题是,当我运行程序并在调用solve()后打印出谜题时,零没有改变,而原始谜题只是打印出来。不确定我的问题是什么,希望得到一些指导!

public ArrayList<Integer> create(){

ArrayList<Integer> possible = new ArrayList<Integer>();

for(int i=1; i<10; i++){
possible.add(i);
}
return possible;
}
public sudoku( int size )
{
SIZE = size;
N = size*size;

Grid = new int[N][N];
for( int i = 0; i < N; i++ )
for( int j = 0; j < N; j++ )
Grid[i][j] = 0;
}

public void solve()
{
int a, b, c, d, i, j, k, l;

int count = 0;
int value= 0;

for(i=0; i<N;i++){
for(j=0; j<N;j++){
if(Grid[i][j]==0){

ArrayList<Integer> possible = create();

//check row
for(a=0; a<N;a++){
for(b=0; b<N; b++){
if(Grid[a][0]==possible.get(a)){
possible.set(a, 0);
}
}
}
//check column
for(c=0; c<N;c++){
for(d=0; d<N;d++){
if(Grid[0][d]==possible.get(d)){
possible.set(d,0);
}
}
}
for(k=0; k<9; k++){
if(possible.get(k)!=0){
count++;
}
}
if(count==1){
for(l=0; l<9; l++){
if(possible.get(l)!=0){
value=possible.get(l);
}
}
}
Grid[i][j]=value;
}
}
}
}

最佳答案

看看你的行if(Grid[a][0]==possible.get(a)) (和类似的地方)。它在那里做什么与你真正想要的是什么?

你可能的数组看起来像这样: [1,2,3,4,5,6,7,8,9]

你的网格(只是第一行,因为你只检查 Grid[a][0])可能看起来像这样: [3,7,8,1,2,9,5,0,4]

您的循环将逐步单独查看每个元素并查看它们是否相等,如下所示:

if(1 == 3) ... it's not
if(2 == 7) ... it's not
if(3 == 8) ... it's not

...等

因此,正如您所看到的,当您执行操作时

for(k=0; k<9; k++){
if(possible.get(k)!=0){
count++;
}
}

大多数情况下,您可能的数组仍然充满选项,除非您的第一行恰好是 [1,2,3,4,5,6,7,8,9] 上的一些变体。其中一个空格中有 0...所以计数肯定会 > 1

因此,您的下一个循环 ( for(l=0; l<9; l++) ) 接下来将被执行,因此值仍然是(如您初始化的那样)0。

尝试在这些点上单步执行调试器并查看数组如何交互。

关于Java 数独解算器不更改空单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10163025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com