스도쿠가 유효한지 아닌지를 확인하는 Java 프로그램이 있습니다. 두 가지 방법이 있습니다. 첫 번째 방법은 모든 열, 하위 격자, 행의 합계를 확인하고 45 일 경우 알려주는 것입니다. 두 번째는 모든 스도쿠의 합이 405인지 예라면 스도쿠는 유효하므로 카운터 예를 찾고 있습니다. 입력에서 스도쿠가 유효하지만 프로그램이 유효하지 않음을 알려줍니다. 이 코드입니다 :스도쿠 솔루션 검사기
public class test_checker {
static final boolean valide=true;
static final boolean non_valide=false;
// verify every sub-grid if it is valid
static boolean check_subgrid(int a[][],int ei,int ej){
int sum=0;
for(int i=ei;i<ei+3;i++){
for(int j=ej;j<ej+3;j++){
sum=sum+a[j][i];
}
}
if(sum!=45) return non_valide;
else return valide;
}
//verify a sudoku by sum of every row & column & sub-grid
static boolean Checker1(int a[][]){
int sum=0;
//check row
for(int i=0;i<9;i++){
sum=0;
for(int j=0;j<9;j++){
sum=sum+a[i][j];
}
if(sum!=45) return non_valide;
}
//check column
for(int i=0;i<9;i++){
sum=0;
for(int j=0;j<9;j++){
sum=sum+a[j][i];
}
if(sum!=45) return non_valide;
}
//check sub-grid
for(int i=0;i<9;i=i+3){
for(int j=0;j<3;j=j+3){
if(check_subgrid(a,i,j)==non_valide) return non_valide;
}
}
return valide;
}
//verify by sum of all sudoku
static boolean Checker2(int a[][]){
int sum=0;
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
sum=sum+a[i][j];
}
}
if(sum!=405) return non_valide;
else return valide;
}
public static void main(String[] args) {
int [][] sudoku =
{
{1,2,3,4,5,6,7,8,9},
{4,5,6,7,8,9,1,2,3},
{7,8,9,1,2,3,4,5,6},
{3,1,2,9,7,8,6,4,5},
{6,4,5,3,1,2,9,7,8},
{9,7,8,6,4,5,3,1,2},
{2,3,1,5,6,4,8,9,7},
{5,6,4,8,9,7,2,3,1},
{8,9,7,2,3,1,5,6,4}
};
if(Checker1(sudoku)) System.out.println("it's valide (checker1)!");
else System.out.println("it's not valide !");
if(Checker2(sudoku)) System.out.println("it's valide (checker2) !");
else System.out.println("it's not valide !");
}
}
긍정적 인 결과를 줄 것이다 (반복되는 숫자는 총 45 개입니다). 번호가 반복되지 않는지 확인해야합니다. –
이 질문은 http://codereview.stackexchange.com에 더 적합한가요? – Paul
물론 귀하의 기준을 충족시키지 못하는 유효한 9x9 스도쿠가 없습니다. 유효한 스도쿠의 정의에서 직접 따릅니다. 당신이 질문해야 할 질문은 *** 유효하지 않은 *** 9 by 9 그리드인지 여부입니다. 그럼에도 불구하고 ***는 귀하의 기준을 충족시킵니다. –