【模拟】数独问题——BSOJ 1204

【题目描述】

        XX学校风靡一款智力游戏,也就是数独(九宫格),先给你一个数独,并需要你验证是否符合规则。
        具体规则如下: 每一行都用到1,2,3,4,5,6,7,8,9,位置不限,
        每一列都用到1,2,3,4,5,6,7,8,9,位置不限,
        每3×3的格子(共九个这样的格子)都用到1,2,3,4,5,6,7,8,9,位置不限,
         游戏的过程就是用1,2,3,4,5,6,7,8,9填充空白,
        并要求满足每行、每列、每个九宫格都用到1,2,3,4,5,6,7,8,9。
         如下是一个正确的数独:
1204

【输入格式】

  输入n个数独,你来验证它是否违反规则. 第一行为数独个数,第二行为第一个数独,之后为第二个,至第n个.每个之间有一个空格

【输出格式】

  若正确则输出”Right”若不正确则输出”Wrong” 输出一个换一行

【输入样例】

2
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9

1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
 

【输出样例】

Right
Wrong
 

【数据规模】

1<=n<=20 (输入的数独个数) 不论输入的数独是错误的还是正确的,
数据都保证每个数在1-9之间,即只会出现因为有相同的数而导致违反规则,
而不会因为数字超出了1-9的范围而违反规则

【题目解析】

        这是一道很水的水题,暴力模拟即可
        逃 

【代码】

#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,a[15][15],f[10];
int read(){
        int s=0,f=1;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
        return s*f;
}
int main(){
        int i,j,k,p,l,q;
        n=read(); 
        while(n--){
                //输入 
                for(i=1;i<=9;i++){
                        for(j=1;j<=9;j++){
                                a[i][j]=read();
                        }
                }

                //
                for(i=1;i<=9;i++){
                        memset(f,0,sizeof(f));
                        k=0;
                        for(j=1;j<=9;j++){
                                f[a[i][j]]++;
                                if(f[a[i][j]]!=1){
                                        k=1;
                                        break;
                                }
                        }
                        if(k==1){
                                printf("Wrong\n");
                                break;

                        }
                }
                if(k==1)continue;

                //
                for(i=1;i<=9;i++){
                        memset(f,0,sizeof(f));
                        k=0;
                        for(j=1;j<=9;j++){
                                f[a[j][i]]++;
                                if(f[a[j][i]]!=1){
                                        k=1;
                                        break;
                                }
                        }
                        if(k==1){
                                printf("Wrong\n");
                                break;
                        }
                }
                if(k==1)continue;

                //每一个宫 
                for(k=1;k<=3;k++){
                        for(l=1;l<=3;l++){
                                memset(f,0,sizeof(f));
                                q=0;
                                for(i=1;i<=3;i++){
                                        for(j=1;j<=3;j++){
                                                f[a[k*3+i-3][l*3+j-3]]++;
                                                if(f[a[k*3+i-3][l*3+j-3]]!=1){
                                                        q=1;
                                                        printf("Wrong\n");
                                                        break;
                                               }
                                        }
                                        if(q==1)break;
                                }
                                if(q==1)break;
                        }
                        if(q==1)break;
                }
                if(q==0)printf("Right\n");
        }
        return 0;
}
 

 

posted @ 2018-08-29 21:23  哇哔波哔波哔哔  阅读(356)  评论(0编辑  收藏  举报