zoukankan      html  css  js  c++  java
  • Gym 100646 Problem E: Su-Su-Sudoku 水题

    Problem E: Su-Su-Sudoku/center>

    题目连接:

    http://codeforces.com/gym/100646/attachments

    Description

    By now, everyone has played Sudoku: you’re given a 9-by-9 grid of boxes which you are to fill in with
    the digits 1 through 9 so that 1) every row has all nine digits, 2) every column has all nine digits, and
    3) all nine 3-by-3 subgrids have all nine digits. To start the game you are given a partially completed
    grid and are asked to fill in the remainder of the boxes. One such puzzle is shown below.
    4 8 1 2 5 3 6 9 7
    2 6 7 9 4 8 1 5
    5 3 9 6 7 1 2 4
    6 5 4 3 8 9 7 1 2
    9 8 7 4 5 6 3
    1 7 3 5 6 2 8 4 9
    7 2 1 3 6 9 5 8
    3 1 5 8 9 7 4 2 6
    8 9 6 4 2 5 3 7 1
    In this problem, you will be given Sudoku grids which you have nearly completed; indeed you’ve filled
    in every box except five. You are asked to complete the grid, or determine that it’s impossible. (You
    might have already made an error!)

    Input

    The first line of input will contain a positive integer indicating the number of test cases to follow. Each
    test case will be a nearly completed Sudoku grid consisting of 9 lines, each containing 9 characters from
    the set of digits 0 through 9. There will be exactly five 0’s in each test case, indicating the five unfilled
    boxes.

    Output

    Output for each test case should be either
    Could not complete this grid.
    if it is impossible to complete the grid according to the rules of the game, or the completed grid, in the
    form given below. (There are no blank spaces in the output.) If there is a way to complete the grid, it
    will be unique. Separate test cases with a blank line.

    Sample Input

    2
    481253697
    267948105
    539671204
    654389712
    908704563
    173562849
    702136958
    315897426
    896425371
    481253697
    267948105
    539671284
    654289710
    908704562
    173562849
    702136958
    315897426
    896425371

    Sample Output

    481253697
    267948135
    539671284
    654389712
    928714563
    173562849
    742136958
    315897426
    896425371
    Could not complete this grid.

    Hint

    题意

    给你个数独,问你有没有解。

    但是这个数独最多只有5个空位。

    题解:

    智障题,只有五个空,那就XJBdfs就好了

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    string s[9];
    struct node{
        int x,y;
        node(int X,int Y):x(X),y(Y){};
    };
    vector<node> V;
    int flag = 0;
    int vis[10];
    bool check(){
        for(int i=0;i<9;i++){
            for(int j=0;j<10;j++)vis[j]=0;
            for(int j=0;j<9;j++){
                vis[s[i][j]-'0']=1;
            }
            for(int j=1;j<=9;j++)if(!vis[j])return false;
        }
        for(int i=0;i<9;i++){
            for(int j=0;j<10;j++)vis[j]=0;
            for(int j=0;j<9;j++){
                vis[s[j][i]-'0']=1;
            }
            for(int j=1;j<=9;j++)if(!vis[j])return false;
        }
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[0][0]-'0']=1;
        vis[s[0][1]-'0']=1;
        vis[s[0][2]-'0']=1;
        vis[s[1][0]-'0']=1;
        vis[s[1][1]-'0']=1;
        vis[s[1][2]-'0']=1;
        vis[s[2][0]-'0']=1;
        vis[s[2][1]-'0']=1;
        vis[s[2][2]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[0][3]-'0']=1;
        vis[s[0][4]-'0']=1;
        vis[s[0][5]-'0']=1;
        vis[s[1][3]-'0']=1;
        vis[s[1][4]-'0']=1;
        vis[s[1][5]-'0']=1;
        vis[s[2][3]-'0']=1;
        vis[s[2][4]-'0']=1;
        vis[s[2][5]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[0][6]-'0']=1;
        vis[s[0][7]-'0']=1;
        vis[s[0][8]-'0']=1;
        vis[s[1][6]-'0']=1;
        vis[s[1][7]-'0']=1;
        vis[s[1][8]-'0']=1;
        vis[s[2][6]-'0']=1;
        vis[s[2][7]-'0']=1;
        vis[s[2][8]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
    
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[3][0]-'0']=1;
        vis[s[3][1]-'0']=1;
        vis[s[3][2]-'0']=1;
        vis[s[4][0]-'0']=1;
        vis[s[4][1]-'0']=1;
        vis[s[4][2]-'0']=1;
        vis[s[5][0]-'0']=1;
        vis[s[5][1]-'0']=1;
        vis[s[5][2]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[3][3]-'0']=1;
        vis[s[3][4]-'0']=1;
        vis[s[3][5]-'0']=1;
        vis[s[4][3]-'0']=1;
        vis[s[4][4]-'0']=1;
        vis[s[4][5]-'0']=1;
        vis[s[5][3]-'0']=1;
        vis[s[5][4]-'0']=1;
        vis[s[5][5]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[3][6]-'0']=1;
        vis[s[3][7]-'0']=1;
        vis[s[3][8]-'0']=1;
        vis[s[4][6]-'0']=1;
        vis[s[4][7]-'0']=1;
        vis[s[4][8]-'0']=1;
        vis[s[5][6]-'0']=1;
        vis[s[5][7]-'0']=1;
        vis[s[5][8]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
    
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[6][0]-'0']=1;
        vis[s[6][1]-'0']=1;
        vis[s[6][2]-'0']=1;
        vis[s[7][0]-'0']=1;
        vis[s[7][1]-'0']=1;
        vis[s[7][2]-'0']=1;
        vis[s[8][0]-'0']=1;
        vis[s[8][1]-'0']=1;
        vis[s[8][2]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[6][3]-'0']=1;
        vis[s[6][4]-'0']=1;
        vis[s[6][5]-'0']=1;
        vis[s[7][3]-'0']=1;
        vis[s[7][4]-'0']=1;
        vis[s[7][5]-'0']=1;
        vis[s[8][3]-'0']=1;
        vis[s[8][4]-'0']=1;
        vis[s[8][5]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
        for(int i=0;i<10;i++)vis[i]=0;
        vis[s[6][6]-'0']=1;
        vis[s[6][7]-'0']=1;
        vis[s[6][8]-'0']=1;
        vis[s[7][6]-'0']=1;
        vis[s[7][7]-'0']=1;
        vis[s[7][8]-'0']=1;
        vis[s[8][6]-'0']=1;
        vis[s[8][7]-'0']=1;
        vis[s[8][8]-'0']=1;
        for(int j=1;j<=9;j++)if(!vis[j])return false;
    
        return true;
    }
    void dfs(int x){
        if(flag)return;
        if(x==V.size()){
            if(check()){
                for(int i=0;i<9;i++)
                    cout<<s[i]<<endl;
                flag = 1;
                return;
            }
            return;
        }
        for(int i=1;i<=9;i++){
            s[V[x].x][V[x].y]=i+'0';
            dfs(x+1);
            if(flag)return;
            s[V[x].x][V[x].y]='0';
        }
    }
    void solve(){
        flag = 0;
        V.clear();
        for(int i=0;i<9;i++)
            cin>>s[i];
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(s[i][j]=='0'){
                    V.push_back(node(i,j));
                }
            }
        }
        dfs(0);
        if(flag==0){
            printf("Could not complete this grid.
    ");
        }
        printf("
    ");
    }
    int main(){
        //freopen("1.in","r",stdin);
        int t;
        scanf("%d",&t);
        while(t--)solve();
        return 0;
    }
  • 相关阅读:
    mysqldump 5.7
    MySQL 5.7主从复制
    MySQL 5.7安装与配置
    MySQL 5.7二进制日志
    Servlet3.x部署描述符
    Redis 4.0.2分布式锁的Java实现
    Redis 4.0.2安装与卸载
    Echarts主题颜色
    eclipse插件jd-eclipse的使用
    Crack IDEA
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5692788.html
Copyright © 2011-2022 走看看