2013-02-26 3 views
1

이 작은 스 니펫의 경우 행과 열의 일부인지 확인하고 난수를 생성합니다. 그 중 하나가 아닌 경우 숫자를 삽입합니다. 이미 3x3 상자에있는 숫자를 넣을 수는 있지만 그 문제는 해결할 수 있습니다. 내 코드를 편집하려면 여기를 클릭하십시오. 내 코드는 약 100 줄입니다.스도쿠 해답, 작은 발췌문 문제 (matlab)

% Find empty slots, generate random number 1 - 9, insert into slot. 
for i=1:9 
    for j=1:9 
     number = board(i,j); 
     answer = ceil(9*rand(1,1)); 
     row = board(i,:); 
     col = board(:,j); 
     if number==0 && (ismember(answer,row)==0) && (ismember(answer,col)==0) 
       board(i,j) = answer; 
     end 
    end 
end 

내 문제는 내가 진짜 미해결 퍼즐이를 실행할 때,이다 그것은 슬롯에 11 삽입) 1, 어떻게 가능할까요? 2) 같은 번호가 둘 이상있는 행과 열을 계속 볼 수 있습니다.

감사합니다.

+0

는이 작동하지 않습니다 당신은 예를 들어'board'이 있습니까 : 나는 단지 하나 개의 임의의 숫자를 시도하지만, 모든 숫자를 (임의의 순서로) 1-9하려고하지, 코드 약간 수정? 약 100 번 임의의 보드에서 실행하면, 나는 확실히 11을 보지 못했습니다. 행이나 열의 숫자가 모두 같은지 확인하지 않았지만 내가 확인한 것을 보지 못했습니다. 코드가 작동해야하는 것처럼 보입니다. – ThijsW

+0

확실한 것은 내가 사용한 퍼즐이이 페이지의 첫 번째 퍼즐이었습니다. http://theory.tifr.res.in/~sgupta/sudoku/algo.html –

답변

1

왜 코드 비트가 행 또는 열에 중복되는지, 왜 11이 표시되는지는 모르겠으므로 정확하게이 질문에 대한 답변이 아니지만 도움이 될 수 있습니다.

for i=1:9 
    for j=1:9 
     tried = []; 
     while board(i,j)==0 
      newRand = 0; 
      while ~newRand 
       answer = ceil(9*rand); 
       if ~ismember(answer,tried) 
        newRand = 1; 
       end 
      end 
      row = board(i,:); 
      col = board(:,j); 
      if (ismember(answer,row)==0) && (ismember(answer,col)==0) 
       board(i,j) = answer; 
      else 
       tried = [tried answer]; 
       if length(tried)==9 
        break; 
       end 
      end 
     end 
    end 
end 
+0

테스트를 실시했는데 실제로 작동하는 것처럼 보입니다. 대단히 고마워, 큰 도움을 주셔서 감사합니다. 나는 여전히 내 코드가 어디로 잘못 가고 있는지 이해하지 못한다. 그러나 나는 당신이 그 코드를 작성하면서 한 것을 정확히 이해합니다. 너는 나에게 두통과 반을 구해줬다. –

+0

반갑습니다. 그리고 다시 : 당신이 정말로 기술 한 문제는 저에게 신비입니다. 당신이 저에게 준 웹 사이트의 보드에서도 한 번 (코드를 사용하여) 일어난 적이 없었습니다. – ThijsW