parent
235a680700
commit
ee9f2bed06
@ -0,0 +1,85 @@
|
||||
bool isRowValid(int matrix[9][9], int row)
|
||||
{
|
||||
bool used[10] = { false };//记录数字是否已经使用过
|
||||
for (int col = 0; col < 9; col++)
|
||||
{
|
||||
if (matrix[row][col] != 0) {
|
||||
int num = matrix[row][col]; if (used[num]) {
|
||||
printf("False:Invalid initial Sudoku matrix!\n The number %d is used in the row %d has been used", num, col);
|
||||
return false;//数字重复出现
|
||||
}used[num] = true;
|
||||
}
|
||||
}return true;
|
||||
}
|
||||
//判断列
|
||||
bool isColValid(int matrix[9][9], int col)
|
||||
{
|
||||
bool used[10] = { false };//记录数字是否已经使用过
|
||||
for (int row = 0; row < 9; row++)
|
||||
{
|
||||
if (matrix[row][col] != 0) {
|
||||
int num = matrix[row][col]; if (used[num]) {
|
||||
printf("False:Invalid initial Sudoku matrix!\n The number %d is used in the col %d has been used", num, row);
|
||||
return false;
|
||||
}used[num] = true;
|
||||
}
|
||||
}return true;
|
||||
}
|
||||
//判断子矩阵
|
||||
bool isSubMatrixValid(int matrix[9][9], int startRow, int startCol) {
|
||||
bool used[10] = { false };//记录数字是否已经使用过
|
||||
for (int row = startRow; row < startRow + 3; row++) {
|
||||
for (int col = startCol; col < startCol + 3; col++) {
|
||||
int num = matrix[row][col];
|
||||
if (num != 0) {
|
||||
if (used[num]) {
|
||||
int block = (row / 3) + (col / 3);
|
||||
printf("False:Invalid initial Sudoku matrix!\n The number %d is used in the block %d has been used", num, block);
|
||||
return false;//数字重复出现
|
||||
}used[num] = true;
|
||||
}
|
||||
}
|
||||
}return true;
|
||||
}
|
||||
//判断整个矩阵
|
||||
bool isSudokuValid(int matrix[9][9]) {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (!isRowValid(matrix, i) || !isColValid(matrix, i)) {
|
||||
return false;//行或列
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 9; i += 3) {
|
||||
for (int j = 0; j < 9; j += 3) {
|
||||
if (!isSubMatrixValid(matrix, i, j)) {
|
||||
return false;//子矩阵
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("True:Valid initial Sudoku matrix!");
|
||||
return true;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
printf("The original Sudoku matrix:\n");
|
||||
int matrix[9][9] = {
|
||||
{5,3,4,6,7,8,9,1,2},
|
||||
{6,7,2,1,9,5,3,4,8},
|
||||
{1,9,8,3,4,2,5,6,7},
|
||||
{8,5,9,7,6,1,4,2,3},
|
||||
{4,2,6,8,5,3,7,9,1},
|
||||
{7,1,3,9,2,4,8,5,6},
|
||||
{9,6,1,5,3,7,2,8,4},
|
||||
{2,8,7,4,1,9,6,3,5},
|
||||
{3,4,5,2,8,6,1,7,9} };
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
for (int j = 0; j < 9; j++)
|
||||
{
|
||||
printf("%4d ", matrix[i][j]);
|
||||
}
|
||||
printf("\n");//格式化输出
|
||||
}
|
||||
isSudokuValid(matrix);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue