java - 算法可能的值java数独

标签 java arrays boolean sudoku

我哪里出错了?这似乎不起作用。我试图在参数中指定 i 和 j 来定位单元格。并返回 9 x 9 数独网格中的可能值。 如果单元格为空,则第一个数组即 a[0]= true;如果单元格正在播放或被占用,则为 false。 数组的其余部分由可以插入到 i 和 j 单元格中的可能值组成。因此,可能的值为 4,那么它将返回 a[4]= true,并且 boolean 数组的其余部分将是可能的。谁能告诉我哪里错了? 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 。您似乎正在扫描游戏板并进行一些测试,以便决定何时将每个索引位置设置为 true。我建议您反转逻辑:将所有值的 possibleArray 设置为 true,然后扫描板上的值以排除特定值。您可以通过使用与 (i, j) 相关的每个位置的游戏板值作为索引,将 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,但您可以在循环退出后修复该问题。

编辑:

这是我同时处理行和列的尝试。它不处理包含位置 (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;
}

我假设(根据您的代码)游戏[1][1]到游戏[GRID_SIZE][GRID_SIZE]是游戏板的正确索引范围。

关于java - 算法可能的值java数独,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6165613/

相关文章:

arrays - 使用芬威克树或 BIT 的数组中非递减子序列的最大总和

python - 使用 'for loop' 合并两个数组

用于检索 HttpServletRequest 参数的 Java 库

java - 日出/查看时间

c# - 计算非空矩阵元素的数量

java - 如何将 Java MessageFormat 选择与 boolean 值一起使用?

java - IF 语句检查(无法正常工作)

既非真亦非假的 Python 事物

java - 生成随机数,每个都有最小大小

java - 在这种情况下,是创建通用 DAO 还是将其与较小的 DAO 分开更好?