php中的迭代问题

时间:2013-11-30 03:05:02

标签: php conflict sudoku solver

我遇到了一个我无法解决的问题......

在这里,我从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;
   }
}

但它根本不匹配,所以我的所有结果都是错误的,我的问题是我无法用数学算法翻译填充的逻辑顺序。

有人可以帮我找到好的迭代来初始化那个数独游戏吗?

感谢您的帮助和关注。

2 个答案:

答案 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)