西电OJ - 1035 数独

题目链接:http://acm.xidian.edu.cn/problem.php?id=1035

#include <iostream>
#include <string.h>
using namespace std;
/****************************************************************************************************************
                题意:判断是否符合数独矩阵
                思路:
                1,每行每列 1—9 有且只出现一次。(可用一个数组记录哪个数字出现了)
                2,每行每列和为45
                3,行列分开遍历即可
****************************************************************************************************************/
int f[10],a[10][10];
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int sum=0;
        for(int i = 1;i <= 9;i ++)
            for(int j = 1;j <= 9;j ++)
                cin>>a[i][j];
        for(int i = 1;i <= 9;i ++){
            memset(f,0,sizeof(f));
            sum=0;
            for(int j = 1;j <= 9;j ++){
                if(a[i][j] < 1 || a[i][j] > 9)
                    continue;
                else if(!f[a[i][j]]){
                    f[a[i][j]]=1;
                    sum+=a[i][j];
                }
            }
            if(sum != 45)
                break;
        }
        if(sum != 45)
            cout<<"no"<<endl;
        else{
            for(int i = 1;i <= 9;i ++){
                memset(f,0,sizeof(f));
                sum=0;
                for(int j = 1;j <= 9;j ++){
                    if(a[j][i] < 1 || a[j][i] > 9)
                        continue;
                    else if(!f[a[j][i]]){
                        f[a[j][i]]=1;
                        sum+=a[j][i];
                    }
                }
                if(sum != 45)
                    break;
            }
            if(sum != 45)
                cout<<"no"<<endl;
            else
                cout<<"yes"<<endl;
        }
    }
    return 0;
}


你可能感兴趣的:(西电OJ - 1035 数独)