zoukankan      html  css  js  c++  java
  • codevs 2924 数独挑战

    水题。爆搜。写得比较丑。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<vector>
    typedef long long LL;
    using namespace std;
    int n=9,a[10][10],h[10][10],l[10][10],cx[10][10],xx[299],yy[299],cnt;
    int check(int i,int j) {
        int r;
        if(i<=3) {if(j<=3) r=1; else if(j>3&&j<7) r=2; else r=3;}
        else if(i>3&&i<7) {if(j<=3) r=4; else if(j>3&&j<7) r=5; else r=6;}
        else {if(j<=3) r=7; else if(j>3&&j<7) r=8; else r=9;}
        return r;
    }
    int dfs(int now) {
        if(now==cnt+1) return 1;
        int x=xx[now],y=yy[now],z=check(x,y);
        for(int i=1;i<=n;i++) if(!h[x][i]&&!l[y][i]&&!cx[z][i]){
            a[x][y]=i;
            h[x][i]=l[y][i]=cx[z][i]=1;
            if(dfs(now+1)) return 1;
            h[x][i]=l[y][i]=cx[z][i]=0;
            a[x][y]=0;
        }
        return 0;
    }
    int main()
    {
        for(int i=1;i<=n;i++) 
            for(int j=1;j<=n;j++) {
                scanf("%d",&a[i][j]);
                int x=a[i][j];
                if(x) {
                    h[i][x]=1;
                    l[j][x]=1;
                    cx[check(i,j)][x]=1; 
                }
                else xx[++cnt]=i,yy[cnt]=j;
            } 
        dfs(1);
        for(int i=1;i<=n;i++) {
            for(int j=1;j<n;j++) 
                printf("%d ",a[i][j]);
            printf("%d
    ",a[i][9]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    hihocoder-1014 Trie树
    51Nod-1265 四点共面
    cf466B Wonder Room
    2014.9.13模拟赛【数位和乘积】
    2014.9.13模拟赛【环上的游戏】
    bzoj2719[Violet 4]银河之星
    wikioi1450 xth的旅行
    poj2352 stars
    2014.9.6模拟赛【藏妹子之处】
    2014.9.6模拟赛【工资】
  • 原文地址:https://www.cnblogs.com/Achenchen/p/7563418.html
Copyright © 2011-2022 走看看