zoukankan      html  css  js  c++  java
  • 填写数独 洛谷P1784

    题目链接:https://www.luogu.org/problemnew/show/P1784

    因为要求行列以及每9个数字组成的中格子都得有1-9这9个数,我们不妨建三个二维数组

    第一维代表是第几个行/列/中格子,第二维是具体数字,然后数组为1就代表第二维的数字已经有了,为0就是没有

    dfs按照从左到右,从上到下的顺序来遍历

    另外,存中格子的的时候1-9也是按照这个顺序来的,用(i-1)/3*3+(j-1)/3+1来表示这是第几个中格子

    #include <bits/stdc++.h>
    using namespace std;
    const double pi=acos(-1);
    const int mod=1e9+7;
    const int maxn=1e5+7;
    typedef long long ll;
    int a[10][10];
    bool h[10][10],l[10][10],g[10][10];//三个数组分别代表行列和组,第一维是行列组的下标,第二维是1-9的莫个数,为0说明还不存在,1存在 
    void print(){
        for(int i=1;i<10;i++){
            for(int j=1;j<9;j++)
            printf("%d ",a[i][j]);
            printf("%d
    ",a[i][9]);
        }
        exit(0);
    }
    void dfs(int x,int y){
        if(a[x][y]){
            if(x==9&&y==9)print();
            if(y==9) dfs(x+1,1);//从左到右,从上到下,依次遍历 
            else dfs(x,y+1);
        }
        else{
            for(int i=1;i<=9;i++){
                if(!h[x][i]&&!l[y][i]&&!g[(x-1)/3*3+(y-1)/3+1][i]){
                    h[x][i]=1;l[y][i]=1;g[(x-1)/3*3+(y-1)/3+1][i]=1;
                    a[x][y]=i;
                    if(x==9&&y==9)print();
                    if(y==9) dfs(x+1,1);
                    else dfs(x,y+1);
                    h[x][i]=0;l[y][i]=0;g[(x-1)/3*3+(y-1)/3+1][i]=0;
                    a[x][y]=0;
                }
            }
        }    
    }
    int main(){
        for(int i=1;i<=9;i++){
            for(int j=1;j<=9;j++){
                scanf("%d",&a[i][j]);
                if(a[i][j]>0){
                    h[i][a[i][j]]=1;
                    l[j][a[i][j]]=1;
                    g[(i-1)/3*3+(j-1)/3+1][a[i][j]]=1;
                }    //cout<<233<<endl;
            }
        }
        dfs(1,1); 
        return 0;
    }
  • 相关阅读:
    机器学习1
    第15次作业
    算符优先分析
    自下而上语法分析
    实验二 递归下降语法分析
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    【shell】通过shell编写ping包及arp的监控并发送短信
    os和sys模块
    time模块和random模块
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/10530080.html
Copyright © 2011-2022 走看看