[模拟]验证数独
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模拟]验证数独相关的知识,希望对你有一定的参考价值。
思考
把每行的数累加 结果不为45 输出Wrong
把每列的数累加 结果不为45 输出Wrong
把3X3区块的数累加 结果不为45输出 Wrong 再判断一遍 3X3的格子中1-9是否都出现 没有则输出Wrong 细节比较多。
而且格式输出真的毒瘤,硬性输出换行符,不输出就PE。还有记得每次初始化数组 WA了半小时在这种水题上面。惭愧惭愧!
#include <cstdio> #include <cstring> int map[20][20],fx[233],fy[233]; bool clock(int i,int j){ int tot=0; int fuck[10]; memset(fuck,0,sizeof(fuck)); for(int a=i;a<=i+2;a++) for(int b=j;b<=j+2;b++){ tot += map[a][b]; fuck[map[a][b]]++; } if(tot!=45) return true; for(int k=1;k<=9;k++) if(fuck[k]==0) return true; return false; } int main(){ int n; scanf("%d",&n); while(n--){ memset(fx,0,sizeof(fx)); memset(fy,0,sizeof(fy)); bool flag=1; for(int i=1;i<=9;i++) for(int j=1;j<=9;j++){ scanf("%d",&map[i][j]); fx[i]+=map[i][j]; fy[j]+=map[i][j]; } for(int i=1;i<=9;i++) if(fx[i]!=45) { printf("Wrong\n"); flag=0; break; } for(int i=1;i<=9 && flag;i++) if(fy[i]!=45) { printf("Wrong\n"); flag=0; break; } int i=1,j=1,fuck=3; while(--fuck && flag){ if( clock(i+=3,j+=3) ){ printf("Wrong\n"); flag=0; break; } } if(flag) { printf("Right\n"); } else continue; } return 0; }
以上是关于[模拟]验证数独的主要内容,如果未能解决你的问题,请参考以下文章