题目:验证数独 rqnoj289
题目描述
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
数独都玩过吧。。。这个只是验证,不要你算
C++ Code
#include<cstdio>
#include<iostream>
bool h[12];
int a[12][12];
int ti[12]= {0,1,1,1,4,4,4,7,7,7};
int tii[12]={0,3,3,3,6,6,6,9,9,9};
int tj[12]= {0,1,4,7,1,4,7,1,4,7};
int tjj[12]={0,3,6,9,3,6,9,3,6,9};
int main()
{
freopen("rqn289.in","r",stdin);
freopen("rqn289.out","w",stdout);
int i,j,k;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
scanf("%d",&a[i][j]);
for(k=1;k<=9;k++)
{
for(j=0;j<=10;j++)h[j]=false;
for(i=ti[k];i<=tii[k];i++)
for(j=tj[k];j<=tjj[k];j++)
{
if(!h[a[i][j]]){h[a[i][j]]=true;continue;}
if(h[a[i][j]]){printf("0");exit(0);}
}
}
for(i=1;i<=9;i++)
{
for(j=0;j<=10;j++)h[j]=false;
for(j=1;j<=9;j++)
{
if(!h[a[i][j]]){h[a[i][j]]=true;continue;}
if(h[a[i][j]]){printf("0");exit(0);}
}
}
for(i=1;i<=9;i++)
{
for(j=0;j<=10;j++)h[j]=false;
for(j=1;j<=9;j++)
{
if(!h[a[j][i]]){h[a[j][i]]=true;continue;}
if(h[a[j][i]]){printf("0");exit(0);}
}
}
printf("1");
return 0;
}