p8ltm3pah 2 years ago
parent 235a680700
commit ee9f2bed06

85
3

@ -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…
Cancel
Save