#include<stdio.h>
#include<string.h>
int sudoku[9][9];
int mark[20];
void dfs()
{
int flag = 0;
int i, j;
int a, b;
for(i = 0; i < 9; i ++){//row judge
memset(mark, 0, sizeof(mark));//判断完一行进行初始化
for(j = 0; j < 9; j++){
// printf("flag:%d\n",flag);
if(mark[sudoku[i][j]] == 0){
mark[sudoku[i][j]] = 1;
}
else{
flag = 1;
break;
}
if(flag == 1){
printf("Wrong\n");
return;
}
}
for(j = 0; j < 9; j++){//col judge
memset(mark, 0, sizeof(mark));//判断完一列进行初始化
for(i = 0; i < 9; i++){
// printf("flag:%d\n", flag);
if(mark[sudoku[i][j]] == 0){
mark[sudoku[i][j]] = 1;
}
else{
flag = 1;
break;
}
if(flag == 1){
printf("Wrong\n");
return;
}
}
}
for(i = 0; i < 9; i = i + 3)
for(j = 0; j < 9; j = j + 3){
memset(mark, 0, sizeof(mark));//!!!判断完一个九宫格后再 初始化
for(a = i; a < i + 3; a++ ){
for(b = j; b < j + 3; b++){
// printf("flag:%d\n",flag);
// printf("sudoku[%d][%d]:%d\n",a,b, sudoku[a][b]);
// printf("mark[%d]:%d\n", sudoku[a][b],mark[sudoku[a][b]]);
if(mark[sudoku[a][b]] == 0){
mark[sudoku[a][b]] = 1;
// printf("mark[%d]:%d\n", sudoku[a][b],mark[sudoku[a][b]]);
}
else{
flag = 1;
break;
}
}
if(flag == 1){
printf("Wrong\n");
return;
}
}
}
if(flag == 0)
printf("Right\n");
}
}
int main(){
int i, j;
int n;
scanf("%d", &n);
while(n--){
memset(sudoku, 0, sizeof(sudoku));
for(i = 0; i < 9; i++)
for(j = 0; j < 9; j++){
scanf("%d", &sudoku[i][j]);
}
dfs();
}
return 0;
}
题目解释: 判断每行 每 列 及每个九宫格 的九个数字不重复
验证数独
最新推荐文章于 2022-12-10 11:45:00 发布