验证数独

来源:互联网 发布:查排名软件怎么样 编辑:程序博客网 时间:2024/05/18 01:38
#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 judgememset(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 judgememset(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;}
题目解释: 判断每行 每 列   及每个九宫格  的九个数字不重复
原创粉丝点击