私はsudokuソルバを書く途中です(まだボックスチェックを書いて実際にプログラムを完成させる必要があります)。私が今テストしているパズルは、どの行/列にも空のセルが1つしかないので、非常に簡単です。パズルは "空の"セルでゼロから始まります。私の問題は、プログラムを実行してsolve()が呼び出された後にパズルを印刷すると、ゼロは変更されず、元のパズルはただ印刷されるということです。私の問題が何であるかわからない、ある方向に感謝するだろう!Javaのsudokuソルバが空のセルを変更していない
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))'のためにすべての列をチェックしているとき、なぜネストされたループを使う必要がありますか? 'a = 0'から' a = N'までの1つのループでこれを行うことができます。列のチェックと同じです。 – noMAD