2013-02-21 43 views
0

总结我的问题,简单地说,我检查每个3x3框,如果有一个缺失值,如果有,它会计算出该数字是什么,然后填充该数字。但是,它只能在左上方的3x3框中停止。这是我的代码片段,涉及到我的问题。如果您想查看代码的其余部分,请稍后再发布。Sudoku Solver,检查每个3x3框

编辑:用户输入董事会。为了测试目的,我试着输入完成的数独谜题,然后在每个框中取出右上角的值。它不仅填补在第3×3,它在董事会最后还是输出,但有其他8个空白填补(与其他8 3×3盒)

% 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); 

回答

5

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

您可以轻松地在您使用find行后加入两行解决这个问题:

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

这样你转换相对块索引回到板的相对指标。

+0

哇,我不敢相信我看过去了。非常感谢你!你一直是一个巨大的帮助。测试该块并按预期工作:) – 2013-02-22 23:30:18