【模拟】验证数独

题目:验证数独 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;
}

 

 

转载于:https://www.cnblogs.com/oijzh/archive/2012/08/17/2643631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值