p1335 数独验证
描述
具体规则如下:
每一行都用到1,2,3,4,5,6,7,8,9,位置不限,
每一列都用到1,2,3,4,5,6,7,8,9,位置不限,
每3×3的格子(共九个这样的格子)都用到1,2,3,4,5,6,7,8,9,位置不限,
游戏的过程就是用1,2,3,4,5,6,7,8,9填充空白,并要求满足每行、每列、每个九宫格都用到1,2,3,4,5,6,7,8,9。
如下是一个正确的数独:
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9
格式
输入格式
输入n个数独,你来验证它是否违反规则.
第一行为数独个数,第二行开始为第一个数独,之后为第二个,至第n个.
注意!每个数独之间有一个回车隔开!
输出格式
若正确则输出”Right”若不正确则输出”Wrong” 输出一个换一行
样例1
样例输入1
2
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
样例输出1
Right
Wrong
思路
每行每列每块分开模拟。
代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(){ 5 int i,n,a[10][10],j,k; 6 scanf("%d",&n); 7 for(k=1;k<=n;k++){ 8 int e=1; 9 for(i=1;i<=9;i++){ 10 for(j=1;j<=9;j++){ 11 scanf("%d",&a[i][j]); 12 } 13 } 14 if(k!=n) 15 getchar(); 16 for(i=1;i<=9;i++){ 17 int b[10]={0}; 18 b[0]=1; 19 for(j=1;j<=9;j++){ 20 if(b[a[i][j]]==0) 21 b[a[i][j]]=1; 22 else{ 23 printf("Wrong\n"); 24 e=0; 25 break; 26 } 27 } 28 if(e==0) 29 break; 30 } 31 if(e==0) 32 continue; 33 for(j=1;j<=9;j++){ 34 int b[10]={0}; 35 b[0]=1; 36 for(i=1;i<=9;i++){ 37 if(b[a[i][j]]==0) 38 b[a[i][j]]=1; 39 else{ 40 printf("Wrong\n"); 41 e=0; 42 break; 43 } 44 } 45 if(e==0) 46 break; 47 } 48 if(e==0) 49 continue; 50 for(i=2;i<=8;i=i+3){ 51 for(j=2;j<=8;j=j+3){ 52 int b[10]={0}; 53 b[0]=1; 54 if(b[a[i][j]]==0) 55 b[a[i][j]]=1; 56 else 57 e=0; 58 if(b[a[i-1][j-1]]==0) 59 b[a[i-1][j-1]]=1; 60 else 61 e=0; 62 if(b[a[i][j-1]]==0) 63 b[a[i][j-1]]=1; 64 else 65 e=0; 66 if(b[a[i-1][j]]==0) 67 b[a[i-1][j]]=1; 68 else 69 e=0; 70 if(b[a[i+1][j]]==0) 71 b[a[i+1][j]]=1; 72 else 73 e=0; 74 if(b[a[i][j+1]]==0) 75 b[a[i][j+1]]=1; 76 else 77 e=0; 78 if(b[a[i+1][j+1]]==0) 79 b[a[i+1][j+1]]=1; 80 else 81 e=0; 82 if(b[a[i-1][j+1]]==0) 83 b[a[i-1][j+1]]=1; 84 else 85 e=0; 86 if(b[a[i+1][j-1]]==0) 87 b[a[i+1][j-1]]=1; 88 else 89 e=0; 90 if(e==0) 91 break; 92 } 93 if(e==0) 94 break; 95 } 96 if(e!=0) 97 printf("Right\n"); 98 else 99 printf("Wrong\n"); 100 } 101 return 0; 102 }