2013-02-21 1 views
0

간단히 말해서 내 문제를 요약하면 누락 된 값이 하나있는 경우 각 3x3 상자를 검사하고 있습니다. 숫자가 무엇인지 계산 한 다음 해당 숫자를 채 웁니다. 그러나, 그것은 단지 왼쪽 상단의 3x3 상자를 수행하고 거기서 멈 춥니 다. 다음은 내 문제와 관련된 코드의 스 니펫입니다. 나머지 코드를보고 싶으면 나머지를 게시합니다.스도쿠 해 찾기, 각 3x3 상자를 확인하십시오

편집 : 사용자가 보드를 입력합니다. 테스트를 위해 완성 된 스도쿠 퍼즐을 입력하고 각 상자의 오른쪽 상단 값을 꺼내 봤습니다. 그것은 첫 번째 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

당신은 매우 가까운 (다른 8 × 3 상자에서) 기입 8 다른 공백이 있었다. 문제는 각 블록에 대해 3x3 블록의 행 및 열 인덱스를 얻는 것입니다. 따라서 각 블록에 대해 다음이 참입니다. row <= 3col <= 3.

당신은 쉽게 find을 사용하는 행 다음에 두 줄을 추가하여이 문제를 해결 할 수 있습니다

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

당신이 보드 상대 인덱스로 다시 블록 상대 인덱스로 변환이 방법.

+0

와우, 나는 그걸 보았다고 생각할 수 없다. 고마워요! 당신은 큰 도움이되었습니다. 그 블록을 테스트하고 의도 한대로 작업 :) –

관련 문제