2017-02-22 1 views
-1

나는 sudoku에서 중복되지 않지만 작동하지 않는 경우 모든 난수를 확인하여 스도쿠를 해결하는 코드가 있습니다 & 그것은 무한 루프에 있다고 생각합니다. 어떤 방법으로 결과를 보여 주겠다. 내 방법이 completly false라면 올바른 방법을 말해 주시고 나를 위해 코드를 편집하십시오.스도쿠에서 모든 난수를 확인하십시오 (자바)

package essai; 

import java.util.Random; 

public class Essai_checker { 

    static final boolean valide=true; 
    static final boolean non_valide=false; 

    //check number if not deplicate in row or colomn or sub grid 
static boolean checkInt(int a[][],int test,int c_i,int c_j){ 

     if(test==0) return non_valide; 

     //check ligne 
     for(int i=0;i<9;i++){ 
      if(test==a[c_i][i]) return non_valide; 
     } 
     //check colomn 
     for(int i=0;i<9;i++){ 
      if(test==a[i][c_j]) return non_valide; 
     } 

     //check sub_grid 

     int ii=c_i/3; 
     int jj=c_j/3; 
     // this test are for telling wich sub-grid contain the number 
     if(ii<3) c_i=0; 
     else 
      if(ii>1 && ii<2) c_i=3;  
      else if(ii>2 && ii<=3) c_i=6; 

     if(jj<3) c_j=0; 
     else 
      if(jj>1 && jj<2) c_j=3;  
      else if(jj>2 && jj<=3) c_j=6; 

     for(int i=c_i;i<c_i+3;i++){ 
      for(int j=c_j;j<c_j+3;j++){ 
       if(test==a[c_i][c_j]) return non_valide; 
      } 
     } 
      return valide; 
     } 
    public static void main(String[] args) { 
     int [][] soduko2={ 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0} 
      }; 
     Random r=new Random(); 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       int entier=r.nextInt(9)+1; 
       boolean init =checkInt(soduko2,entier,i,j); 
       while(init ==non_valide){ 
        entier=r.nextInt(9); 
        init =checkInt(soduko2,entier,i,j); 
       } 
       if(init=true) 
        soduko2[i][j]=entier; 
      } 
      } 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       System.out.println(soduko2[i][j]+","); 
      } 
     } 
     System.out.println("Done!"); 

    } 

} 
+0

-1 "쓰기 방법에 대해 말해주세요."- "올바른 방법"을 따르십시오. 코드를 편집하면 원하는 방식으로 SO가 작동하지 않습니다. – ControlAltDel

+0

보드에 문제가 있습니다. 충전재 알고리즘. 당신이 채우는 방법은 주어진 사각형에 가능한 유효한 값이없는 곳에서 끝까지 떠날 수 있습니다. 이 경우 프로그램이 임의의 숫자를 생성하지 못하고 아무 것도 작동하지 않습니다. 더 나은 알고리즘이 필요합니다 – ControlAltDel

+0

매번 모든 sudoko를 테스트하기 때문에 나는 그렇게 생각하지 않습니다. – Katty

답변

1

첫째, (ii>1 && ii<2)는 항상 false 될 것입니다 조건, 몰라이 문제

둘째, ii==3

어쩌면 이것이의 일부가 될 경우 (ii>2 && ii<=3)은 사실이 될 것이다 조건이 될 수있는 경우 문제

+0

나는 서브 그리드 검사를 주석으로 만들고 같은 문제 – Katty

관련 문제