Php 数独解算器上的块扫描说明

Php 数独解算器上的块扫描说明,php,algorithm,sudoku,Php,Algorithm,Sudoku,我试过这个数独解算器。它很好用 另请参见此电子表格以了解计算中的更多详细信息: 我知道行和列是如何扫描的。从董事会了解到: 索引=9*行+列 行=楼层(索引/9) col=索引%9 对于块,因为它是从3x3板构建的,所以公式:block\u index=3*row\u block+col\u row。因为每个区块有3行和3列,所以row\u block=floor(row/3)和col\u block=floor(col/3)的公式。从这里我们可以得出结论: block_index = 3*

我试过这个数独解算器。它很好用

另请参见此电子表格以了解计算中的更多详细信息:

我知道行和列是如何扫描的。从董事会了解到:

  • 索引=9*行+列
  • 行=楼层(索引/9)
  • col=索引%9
对于块,因为它是从3x3板构建的,所以公式:
block\u index=3*row\u block+col\u row
。因为每个区块有3行和3列,所以
row\u block=floor(row/3)
col\u block=floor(col/3)
的公式。从这里我们可以得出结论:

block_index = 3*row_block + col_row
block_index = 3(floor(row/3)) + floor(col/3)
block_index = floor(row/3)*3 + floor(col/3)
这可以解释这些功能:

  • 返回行
  • 雷顿谷
  • 返回块
  • 有可能吗
  • 可能吗
但我无法理解
是否可能\u块
功能。以下是函数:

function is_possible_block($number,$block,$sudoku){
    $possible = true;
    for($x = 0;$x <= 8;$x++){
        if($sudoku[floor($block / 3) * 27 + $x % 3 + 9 * floor($x / 3) + 3 * ($block % 3)] == $number){
            $possible = false;
        }
    }
    return $possible;
}
如何
col=3col\u block+col\u x\u block
,因为据我所知,公式应该是这样的:
col=3row\u block+col

我知道
col\u x\u块
0-8块上的平均列位置。和
行块
0-2块上的平均行位置

你如何解释这个公式?谢谢

更新

现在我知道了<代码>楼层($block/3)*3
3*($block%3)
确定区块的左上角。然后
floor($x/3)
$x%3
移动块中的每个单元格。

我在c中使用它++

for(int k = ((x - 1) / 3) * 3 + 1; k < ((x - 1) / 3) * 3 + 4; k++
for(int k=((x-1)/3)*3+1;k<((x-1)/3)*3+4;k++
因为“x”是整数“/”操作返回int值


也许3(floor($block-1/3))可以帮助你。

解释算法?解释公式。我们如何得到公式?我不知道如何在is_u-mable_-block公式中推理。你能给出你答案的更多细节吗?它是基于0或基于1的数独?我们如何得到数字4?我确定数组[10][10]当x=4,5,6 in((x-1)/3)*3+1返回((x-1)/3)返回1,和((x-1)/3)*3+1返回4你能发布你函数的其余部分吗?我真的很困惑你的公式。因为你使用基于1的数独,你的公式是
for(int k=((x-1)/3)*3+1;k<((x-1)/3)*3+4;k++
如果我将其转换为基于0的,那么对于(int k=((x)/3)*3;k<((x)/3)将变成这样*3+3;k++
。但是如何使用它?k是什么?x是什么?如果$block=0
x=0,k=0;x=1,k=1;x=2,k=2;x=3,k=9;x=4,k=10;x=5,k=11;x=6,k=18;x=7,k=19;x=8,k=20,那么结果应该是这样的:x是函数的参数
for(int k = ((x - 1) / 3) * 3 + 1; k < ((x - 1) / 3) * 3 + 4; k++