0

私の問題を簡単にまとめると、欠落している値が 1 つあるかどうか、各 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

を使用する行の後に次の 2 行を追加することで、これを簡単に解決できますfind

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

このようにして、ブロック相対インデックスをボード相対インデックスに変換します。

于 2013-02-22T05:55:36.693 に答える