정확히 같은 문제를 해결하기 위해 약 4 년 전에 C에서 다음 코드를 작성했습니다. 그러나 보이는 것처럼 짐작할 만하다. int 배열은 9x9 격자입니다. "색인"은 0 ... 8 번째 줄, 0 ... 8 번째 열 및 0 ... 8 번째 상자를 지정합니다.
int checkBox(int a[][9], int index)
{
int i, j, isValid = 1;
int m, n;
for(i = 3*(index%3) ; isValid && (i < (3*(index%3) + 3)); i++)
{
for(j = 3*(index/3); isValid && (j < (3*(index/3) + 3)); j++)
{
for(m = (3*(index%3)) ; isValid && (m < (3*(index%3) + 3)); m++)
{
for(n = 3*(index/3); isValid && (n < (3*(index/3) + 3)); n++)
{
if(isValid && (a[m][n] == 0) || ((i != m) || (j != n)) && (a[i][j] == a[m][n])) //select given element and compare others to it
{ //if any element is the same that is not itself then the sudoku is not valid
isValid = 0; //this checks for 3x3 box
}
}
}
}
}
return isValid;
}
기본적으로 내가이 특정 상자를 선택하고, 그 상자에 내가 일치의 어떤 종류가 있는지 모든 번호를 확인할 때까지 그냥 인덱스를 조작했다 않았다. 일치하는 항목이 있으면 스도쿠가 유효하지 않습니다. 그냥 어레이 관리의 고려, 물론
int checkSudoku(int a[][9]) //check every row, column and box
{ //if there is no contradiction then it is valid
int i, isValid = 1;
for(i = 0; isValid && (i < 9); i++)
{
isValid = (checkLine(a, i) && checkColumn(a, i) && checkBox(a, i));
}
return isValid;
}
, 동일한 개념이 자바에 적용 할 수 있습니다 결국
는이 같은 유효성을 확인.
9x9 그리드에 사용하는 코드를 게시하십시오. puzzle [i] [j] = Integer.toString (Constants.game [i] [j])에 대한 – Blender
에 대한 (int i = 0; i <9; i ++) for (int j = 0; j <9; j ++) { ])); – user1736639