「CODEVS2207」验证数独
题目描述
Alunay最近迷上了数独这个游戏,他在完成一个数独后总要费一些时间来检查。于是他把Whitegene作为苦力拽来帮他检查。由于Whitegene是搞OI的,所以他就想写个程序来判断Alunay完成的数独是否正确。不过最近他在感情上遇到了一些问题没有功夫去写,就想请你帮他完成这个任务。
数独规则:拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。
输入格式一个9*9个矩阵
输出格式一个数字,1为构成数独,0为不构成数独
输入
6 3 7 8 5 4 9 2 1
9 8 4 2 1 3 5 7 6
7 2 1 3 8 9 6 4 5
8 1 9 7 4 6 3 5 2
5 4 3 9 2 8 1 6 7
2 7 6 1 9 5 8 3 4
3 5 2 6 7 1 4 9 8
4 9 8 5 6 2 7 1 3
1 6 5 4 3 7 2 8 9
输出
0
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include<iostream> #include<cstring> using namespace std; int used[10]; int a[10][10]; void work() { for(int x=1;x<=7;x+=3) for(int y=1;y<=7;y+=3) { memset(used,0,sizeof(used)); for(int i=x;i<=x+2;i++) { for(int j=y;j<=y+2;j++) { if(!used[a[i][j]])used[a[i][j]]=1; else {cout<<"0";return;} } } } for(int i=1;i<=9;i++) { memset(used,0,sizeof(used)); for(int j=1;j<=9;j++) { if(!used[a[i][j]])used[a[i][j]]=1; else {cout<<"0";return;} } } for(int i=1;i<=9;i++) { memset(used,0,sizeof(used)); for(int j=1;j<=9;j++) { if(!used[a[j][i]])used[a[j][i]]=1; else {cout<<"0";return;} } } cout<<"1"; } int main() { for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) cin>>a[i][j]; work(); return 0; } |
Subscribe