【模拟】验证数独

题目:验证数独 rqnoj289

题目描述

  Alunay最近迷上了数独这个游戏,他在完成一个数独后总要费一些时间来检查。于是他把Whitegene作为苦力拽来帮他检查。由于Whitegene是搞OI的,所以他就想写个程序来判断Alunay完成的数独是否正确。不过最近他在感情上遇到了一些问题没有功夫去写,就想请你帮他完成这个任务。

数独规则:拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。

输入格式

一个9*9个矩阵

输出格式

一个数字,1为构成数独,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;
}

 

 

posted @ 2012-08-17 10:42  jiangzh  阅读(455)  评论(0编辑  收藏  举报