[英]alogrithim possible values java sudoku
我哪里错了? 这似乎不起作用。 我试图在参数中指定一个 i 和 j 来定位单元格。 并返回 9 x 9 数独网格中的可能值。 如果单元格为空,则第一个数组即 a[0]= true,如果正在播放或占用,则为 false。 数组的 rest 由值组成,这些值是可以插入到 i 和 j 单元格的可能值。 因此,可能的值为 4,那么它将返回 a[4]= true 并且 boolean 数组的 rest 是可能的。 谁能告诉我哪里出错了? while循环不正确吗?
public boolean[] getPossible( int i, int j)
{
final int booArraySize = 10;
boolean[] possibleArray = new boolean[booArraySize];
int zero = 0;
if ( game[i][j] == 0)
{
for( int b=1; b < possibleArray.length; b++)
{
possibleArray[b] = true;
}
int row=i;
int col= 0;
int[] copyy = new int[GRID_SIZE];
for( int m = 0; m < copyy.length; m++)
{
copyy[m] = 1;
}
while ( (copyy[0] < 10) && (copyy[0] >0))
{
for ( int q= col+1; q < game.length; q++)
{
if( copyy[0] == game[row][q])
{
possibleArray[q] = false;
}
else
{
possibleArray[q] = possibleArray[q];
}
}
copyy[0] = copyy[0] + 1;
}
possibleArray[0]= true;
}
return possibleArray;
}
据我了解,您正试图在与允许值对应的位置将possibleArray
设置为true
。 您似乎正在扫描游戏板并进行一些测试,以确定何时将每个索引 position 设置为true
。 我建议您颠倒您的逻辑:将所有值的possibleArray
设置为true
,然后扫描板以查找可以排除特定值的值。 您可以通过使用与 (i, j) 相关的每个 position 处的游戏板值作为将possibleArray
设置为false
的索引,如以下伪代码所示:
// initialize possibleArray to true at all positions
for (each board position u,v along row i, column j, and square containing (i,j)) {
possibleArray[game[u][v]] = false;
}
possibleArray[0] = true; // do this after instead of before
对于空的游戏位置,这会将 possibleArray[0] 设置为 false,但您可以在循环退出后修复它。
编辑:
这是我同时处理行和列的尝试。 它不处理包含 position (i,j) 的 3x3 框; 这留作练习。 :)
public boolean[] getPossible( int i, int j)
{
boolean[] possibleArray = new boolean[10];
if (game[i][j] == 0)
{
for( int b=1; b < 10; b++)
{
possibleArray[b] = true;
}
for (int n = 1; n < GRID_SIZE; ++n) {
possibleArray[game[i][n]] = possibleArray[game[n][j]] = false;
}
// TODO Scan the 3x3 square containing cell (i,j)
possibleArray[0]= true;
}
return possibleArray;
}
我假设(根据您的代码)从 game[1][1] 到 game[GRID_SIZE][GRID_SIZE] 是游戏板的正确索引范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.