数独求解器,检查每个3x3盒子

时间:2013-02-21 20:28:47

标签: matlab

简单地总结一下我的问题,我正在检查每个3x3盒子,如果有一个缺失值,如果有,它会计算这个数字是什么,然后填入那个数字。但是,它只做上层离开3x3盒子,然后停在那里。以下是与我的问题相关的代码片段。如果你想看到剩下的代码,我会发布其余的代码。

编辑:用户输入电路板。出于测试目的,我尝试输入完整的数独谜题,然后在每个框中取出右上角的值。它只填充了第一个3x3,它仍然在最后输出板,但还有8个其他空白填充(来自其他8个3x3盒)

% Check each 3x3 box for one through nine, fill in
for i = 0:2
    for j = 0:2
        if sum(sum(board([1:3]+i*3,[1:3]+j*3)~=0))==8
            [row,col] = find(board([1:3]+i*3,[1:3]+j*3)==0);
            answer = 45 - sum(sum(board([1:3]+i*3,[1:3]+j*3)));
            board(row,col) = answer;
        end
    end
end
disp(board);

1 个答案:

答案 0 :(得分:5)

你非常接近。问题是,对于每个块,您将获得 3x3 块的行和列索引。因此,对于每个块,以下情况属实:row <= 3col <= 3

您可以通过在使用find的行之后添加这两行来轻松解决此问题:

row = row + (3*i);
col = col + (3*j);

这样您就可以将块相对索引转换回与板相关的索引。