「力ずくの」ランダム性アプローチを使用して、数独ジェネレーターを作成しています。コードを使用して、x/y軸の重複番号を問題なくチェックできました。
for(l=0; l<9; l++){//Makes all vertical work.
if(sudoku[l][j] == temp){
isUsed=true;
}
}
for(m=0; m<9; m++){//makes all horizontal work
if(sudoku[i][m] == temp){
isUsed=true;
}
}
「ボックス」または「リージョン」チェック(原点から3x3の正方形ごとにチェックする)を実装することにしましたが、コードに頭を悩ませているようには見えません。これが私がこれまでにしたことです。論理エラーがどこにあるのか完全にはわかりません(記録のために、プログラムはこのコードで実行されますが、領域を適切にチェックしません)
rowbase = i-(i%3);
if(i==2 || i==5 || i==8 ){
if(rowbase == 0 || rowbase == 3 || rowbase == 6){
isUsed= RegionCheck.RegCheck(rowbase, sudoku);
}
}
regionCheck.javaの内容:
boolean okay = false;
int[] regionUsed = new int[9];
int i=0, j=0, regionTester=0, counter=0, numcount;
for (i=regionTester; i<regionTester+3; i++){
for (; j<3; j++){
regionUsed[counter]=sudoku[i][j];
counter++;
}
}
for(i=0; i<9; i++){
numcount=regionUsed[i];
for(j=0; j<9; j++){
if(j==i){
//null
}
else if(numcount == regionUsed[j]){
okay=false;
}
}
}
return okay;
途中のどこかで迷子になり、リージョンを「選択」してリージョンを反復処理する方法がわかりません。
完全なソースはこちら:http: //ideone.com/FYLwm
テストする領域を「選択」して、それを反復処理する方法についてのヘルプは、私が本当にアイデアがないので、非常にありがたいです。