数独の判断は正しいです

線INT [10] [10];
//ライン[1] [2] = 1; 2は数字の最初の行1回発生
ローINT [10] [10];
int型ブロック[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
おすすめ