0

简而言之,我会检查每个 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);
4

1 回答 1

5

你很亲密。问题是对于每个块,您都获得了3x3块的行和列索引。因此,对于每个块,以下是正确的:row <= 3并且col <= 3.

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

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

通过这种方式,您可以将块相对索引转换回板相对索引。

于 2013-02-22T05:55:36.693 回答