我最近想看看我是否能够在php中解决一个简单的数独(首先)。我知道PHP并不是编程原因的选择,但我知道PHP最好,并且我在java和c中的设计方面有问题。尽管如此,我没有看到它不应该起作用的任何理由。php简单的数独求解器使用回溯
首先我不想问你,因为那里有一些解决的线索。但是我发现这些解决方案对我来说太复杂了(其他语言,复杂的结构)并且超出了我的目标。
我的问题是:有人可以根据我的目标给我一个提示吗?我想要一个简单的数独求解器而不用猜测,只需要回溯。
的算法是这样的:
$cell; // 1-81 - as parameter of the recursive function solve()
$value; // 1-9 - as parameter ...
class Sudoku {
function solve($cell = 1, $value = 1) {
// skipping values
if the current cell is fix:
return solve(cell++, $value);
// testing values (logic)
if not:
if the value is within the square (3x3) itself:
return solve($cell, $value++);
if the value is within the row:
return solve($cell, $value++);
if the value is within the col:
return solve($cell, value++);
if the value is bigger than 9:
return solve($cell--, $value_prev);
// all test passed, add the new value to list
$this->values[$cell] = $value;
if all fields are filled:
return;
if there are fields left:
return solve($cell++, 1);
}
}
如果我创建了一个空白的数独它将填补了所有正确的,直到电池43.脚本有致命错误崩溃:致命错误:134217728允许的内存大小字节耗尽(试图分配261904字节)。
数值填入如下:
1 2 3 | 4 5 6 | 7 8 9
4 5 6 | 7 8 9 | 1 2 3
7 8 9 | 1 2 3 | 4 5 6
2 1 4 | 3 6 5 | 8 9 7
3 6 5 | 2 1 4 | 。 。 。
我想有一个无限循环或导致这次崩溃的东西。也许这是不可解决的。我只是想知道我是否正确或忘记检查。 我也尝试过使用easy-sudoku的固定值的算法。它也崩溃...也许有很多回溯。
最后,我想说,我不是反对更好的解决方案,但我只是想这个工作。 如果你不能给我在此基础上的答案,你可以看看php文件:
编辑: sudoku2.php
在此先感谢。
它仍然无法正常工作。但是我可以防止系统崩溃。不,我总是得到这样的信息:“不能解决这个数独”。我想我喜欢你说的。你可能会看看我上面发布的源代码? “sudoku2.php”。 – 2012-04-05 14:22:24
它现在可以工作......我忘了在回溯到前一个单元格之前将单元格值重置为0。这就是诀窍。 – 2012-04-07 13:10:27