Sudoku Checker

来源:互联网 发布:淘宝开网店的详细步骤 编辑:程序博客网 时间:2024/06/10 09:01

https://code.google.com/codejam/contest/2929486/dashboard


#include<stdio.h>#include<string.h>int arr[40][40];int key[40];int main(){    FILE *file;    int T,N,i,ncase=1,j,flag,x,y;    freopen("C:\\Users\\think\\Desktop\\in.in","r",stdin);    file=freopen("C:\\Users\\think\\Desktop\\output.txt","w+",stdout);    scanf("%d",&T);    while(T--)    {        scanf("%d",&N);        for(i=1;i<=N*N;i++)            for(j=1;j<=N*N;j++)                scanf("%d",&arr[i][j]);        memset(key,0,sizeof(key));        flag=1;        for(j=1;j<=N*N;j++)        {            memset(key,0,sizeof(key));            for(i=1;i<=N*N;i++)            {                if(0==key[arr[j][i]])                    key[arr[j][i]]=1;                else                    flag=0;            }            for(i=1;i<=N*N;i++)                if(0==key[i])flag=0;        }        if(0==flag)            fprintf(file,"Case #%d: No",ncase++);        else        {            for(i=1;i<=N*N;i++)            {                memset(key,0,sizeof(key));                for(j=1;j<=N*N;j++)                    key[arr[j][i]]=1;                for(j=1;j<=N*N;j++)                    if(0==key[j])flag=0;            }            if(0==flag)                fprintf(file,"Case #%d: No",ncase++);            else            {                for(i=1;i<=N;i++)                {                    for(j=1;j<=N;j++)                    {                        memset(key,0,sizeof(key));                        for(x=1;x<=N;x++)                        {                            for(y=1;y<=N;y++)                                key[arr[N*(i-1)+x][N*(j-1)+y]]=1;                        }                        for(y=1;y<=N;y++)                            if(0==key[y])                                flag=0;                    }                }                fprintf(file,"Case #%d: %s",ncase++,flag?"Yes":"No");            }        }        fprintf(file,"\n");    }    return 0;}