## L1-104 九宫格

题目链接：https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388423&page=1

**题目分析：看题，题目说n<=10,说明数据量其实是比较小的，所以这道题也可以暴力求解。具体方法就是分别检查每一行，每一列，还有每个3*3宫位,同时使用哈希表来检查1-9只出现一次**

解法代码：

```cpp
#include<bits/stdc++.h>
using namespace std;
bool checkgrid(vector<vector<int>>& grid){
    for(int row = 0; row < 9; row++) {
        unordered_set<int> s;
        for(int col = 0; col < 9; col++) {
            int num = grid[row][col];
            // 数字不在1-9范围内 或 重复出现
            if(num < 1 || num > 9 || s.count(num)) {
                return false;
            }
            s.insert(num);
        }
    }

    // 检查每一列
    for(int col = 0; col < 9; col++) {
        unordered_set<int> s;
        for(int row = 0; row < 9; row++) {
            int num = grid[row][col];
            if(num < 1 || num > 9 || s.count(num)) {
                return false;
            }
            s.insert(num);
        }
    }

    // 检查每个3x3宫位
    for(int r_start = 0; r_start < 9; r_start += 3) {
        for(int c_start = 0; c_start < 9; c_start += 3) {
            unordered_set<int> s;
            for(int row = r_start; row < r_start + 3; row++) {
                for(int col = c_start; col < c_start + 3; col++) {
                    int num = grid[row][col];
                    if(num < 1 || num > 9 || s.count(num)) {
                        return false;
                    }
                    s.insert(num);
                }
            }
        }
    }

    return true;
}
int main(){
    int n;
    cin>>n;
    bool check;
    vector<vector<int>> grid(9,vector<int>(9));
    for(int z=0;z<n;z++){
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                cin>>grid[i][j];
            }
        }
        check=checkgrid(grid);
        if(check){
            cout<<"1"<<endl;
        }
        else{
            cout<<"0"<<endl;
        }
    }
    return 0;
}
