我遇到了一个我无法解决的问题......
在这里,我从HTML页面获得了这种形式的数据,例如:
<table cellspacing="0" cellpadding="0" class="sudoku">
<tr>
<td class="chiffe1">0</td>
<td class="chiffe1">0</td>
<td class="chiffe1">0</td>
</tr>
<tr>
<td class="chiffe1">0</td>
<td class="chiffe1">0</td>
<td class="chiffe1">0</td>
</tr>
<tr>
<td class="chiffe1">0</td>
<td class="chiffe1">0</td>
<td class="chiffe1">0</td>
</tr>
</table>
问题是2D数组的增量应该像这样填充它:
0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2
0,4
0,5
0,6
1,4
1,5
1,6
2,4
2,5
2,6
0,7
0,8
0,9
1,7
1,8
1,9 ...
对于尺寸为[9] [9]的标签。
我的问题是我已经编写了所有函数来解决它,但我正在填充它的逻辑:
for($i=0;$i<9;$i++){
for($j=0;$j<9;$j++){
$tab[$i][$j]=$val;
}
}
但它根本不匹配,所以我的所有结果都是错误的,我的问题是我无法用数学算法翻译填充的逻辑顺序。
有人可以帮我找到好的迭代来初始化那个数独游戏吗?
感谢您的帮助和关注。
答案 0 :(得分:1)
是通过“方框”,然后放在那个方框中。
for($boxx=0;$boxx<3;$boxx++){
for($boxy=0;$boxy<3;$boxy++){
for($i=0;$i<3;$i++){
for($j=0;$j<3;$j++){
$tab[3*$boxx + $i][3*$boxy + $j]=$val;
}
}
}
}
答案 1 :(得分:1)
你必须一次循环一组三行三列,并将$ i和$ j移动到集合的起始值:
// sets of three for $i
for($iset=0; $iset<3; $iset++) {
$istart=$iset*3;
for($i=0;$i<3;$i++){
// sets of three for $j
for($jset=0; $jset<3; $jset++) {
$jstart=$jset*3;
for($j=0;$j<3;$j++){
$tab[$istart+$i][$jstart+$j]=$val;
}
}
}
}
因此对于集合(0,1,2),您将拥有起始值(0,3,6)。所以你最终会像这样迭代(希望能解决你的问题):
i-> (0, 1, 2) j -> (0, 1, 2), (3, 4, 5), (6, 7, 8)
i-> (3, 4, 5) j -> (0, 1, 2), (3, 4, 5), (6, 7, 8)
i-> (6, 7, 8) j -> (0, 1, 2), (3, 4, 5), (6, 7, 8)