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;
    }
  • 相关阅读:
    常用Linux命令
    KDevolop使用小技巧
    微软在5/10/2006发布新版的LINQ Preview (May 2006).msi 无为而为
    盼望已久的Office Live Beta 已经发布,大家可以去尝尝鲜 无为而为
    需求工程:TFS MSF模版中UI Flow model的应用 无为而为
    Visual Studio 2005 Team Foundation Server 试用版及中文说明文件下载,中文版可能在2006年5月15日发布 无为而为
    让我们努力从“不可救药的乐观主义者”华尔街知名投资人约翰。多尔那里学点东西(永远放弃尝试改变这个世界) 无为而为
    Visual Studio 2005 开发Office(Word/Excel)项目的若干资源和示例 无为而为
    IT人看《国富论》系列:第一篇之第十章:论工资与利润随劳动与资本用途的不同而不同,分析分析IT界薪水起伏的原因 无为而为
    非正常状态,彻底删除Exchange服务器 无为而为
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5692788.html
Copyright © 2011-2022 走看看