判断数独是否正确

int line[10][10];
//line[1][2]=1; 第一行 数字2出现一次
int row[10][10];
int block[10][10];

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int mp[10][10];
void in_(){
    for(int i=1; i<=9; i++)
        for(int j=1; j<=9; j++)
            cin >> mp[i][j];
}
bool check(){
    int line[10][10]; //line[1][2]=1; 第一行 数字2出现一次
    int row[10][10];
    int block[10][10];
    memset(line,0,sizeof(line));
    memset(row,0,sizeof(row));
    memset(block,0,sizeof(block));
    int t,blocknum;
    for(int i=1; i<=9; i++){
        if(i>=7) t = 7;
        else if(i>=4) t = 4;
        else if(i>=1) t = 1;
        for(int j=1; j<=9; j++){
            if(j>=7) blocknum = t+2;
            else if(j>=4)  blocknum = t+1;
            else if(j>=1)  blocknum = t;
            line[i][mp[i][j]]++;
            row[j][mp[i][j]]++;
            block[blocknum][mp[i][j]]++;
        }
    }
    for(int i=1; i<=9; i++)
        for(int j=1; j<=9; j++){
            if(line[i][j]!=1) return false;
            if(row[i][j]!=1) return false;
            if(block[i][j]!=1) return false;
        }
    
    return true;
}
int main(){
    
    cin >> n;
    while(n--){
        in_();
        if(check())
            cout << "Right" << endl;
        else
            cout << "Wrong" << endl;
    }
    return 0;
}


发布了62 篇原创文章 · 获赞 0 · 访问量 1751

猜你喜欢

转载自blog.csdn.net/jhckii/article/details/104361898