• HDU 1426 Sudoku Killer(搜索)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1426

    题意很明确,让你解一个9*9的数独。

    DFS即可。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    
    using namespace std;
    
    #define REP(i,n)        for(int i(0); i <  (n); ++i)
    #define rep(i,a,b)        for(int i(a); i <= (b); ++i)
    #define dec(i,a,b)        for(int i(a); i >= (b); --i)
    #define for_edge(i,x)        for(int i = H[x]; i; i = X[i])
    
    #define LL    long long
    #define ULL    unsigned long long
    #define MP    make_pair
    #define PB    push_back
    #define FI    first
    #define SE    second
    #define INF    1 << 30
    
    const int N    =    100000        +    10;
    const int M    =    10000        +    10;
    const int Q    =    1000        +    10;
    const int A    =    30        +    1;
    
    
    struct node{
        int x, y;
    } d[Q];
    
    char ch;
    
    bool a[A][A];
    int f[A][A], r[A][A], c[A][A], v[A][A];
    bool rr[A][A], cc[A][A], vv[A][A];
    int num;
    
    
    inline void print(){
        rep(i, 1, 9){rep(j, 1, 8) printf("%d ", f[i][j]); printf("%d", f[i][9]); putchar(10);}
    }
    
    void dfs(int now){
        if (now > num){ print(); return ;}
        int x = d[now].x, y = d[now].y;
    
        rep(i, 1, 9){
            if (vv[v[x][y]][i]) continue;
            if (cc[c[x][y]][i]) continue;
            if (rr[r[x][y]][i]) continue;
            f[x][y] = i;
            vv[v[x][y]][i] = true;
            cc[c[x][y]][i] = true;
            rr[r[x][y]][i] = true;
            dfs(now + 1);
            f[x][y] = 0;
            vv[v[x][y]][i] = false;
            cc[c[x][y]][i] = false;
            rr[r[x][y]][i] = false;
        }
    
    }
    
                
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("test.txt", "r", stdin);
        freopen("test.out", "w", stdout);
    #endif
    
    
        rep(i, 1, 3) rep(j, 1, 3) v[i][j] = 1;
        rep(i, 1, 3) rep(j, 4, 6) v[i][j] = 2;
        rep(i, 1, 3) rep(j, 7, 9) v[i][j] = 3;
        rep(i, 4, 6) rep(j, 1, 3) v[i][j] = 4;
        rep(i, 4, 6) rep(j, 4, 6) v[i][j] = 5;
        rep(i, 4, 6) rep(j, 7, 9) v[i][j] = 6;
        rep(i, 7, 9) rep(j, 1, 3) v[i][j] = 7;
        rep(i, 7, 9) rep(j, 4, 6) v[i][j] = 8;
        rep(i, 7, 9) rep(j, 7, 9) v[i][j] = 9;
        rep(i, 1, 9) rep(j, 1, 9) r[i][j] = i, c[i][j] = j;
        int Case = 0;
    
        //rep(i, 1, 9){rep(j, 1, 9) printf("%d ", c[i][j]); putchar(10); }
        while (~scanf("%c ", &ch)){
            if (Case) puts(""); else Case = 1;
        //    memset(a, false, sizeof a);
            memset(f, 0, sizeof f);
            memset(cc, false, sizeof cc);
            memset(vv, false, sizeof vv);
            memset(rr, false, sizeof vv);
            memset(d, 0, sizeof d); 
            num = 0;
            if (ch == '?'){
                   f[1][1] = 0;
                   d[++num].x = 1, d[num].y = 1;
            }     
            else{
                       int np = (int)ch - 48;
                    f[1][1] = np;
                    cc[c[1][1]][np] = true;
                    vv[v[1][1]][np] = true;
                    rr[r[1][1]][np] = true;
            }
            
            rep(cnt, 2, 81){
                scanf("%c ", &ch);
                int x = (cnt - 1) / 9 + 1, y = (cnt - 1) % 9 + 1;
                if (ch == '?'){
                       f[x][y] = 0;
                    d[++num].x = x, d[num].y = y;
                }
                else{
                    int np = (int)ch - 48;
                    f[x][y] = np;
                    cc[c[x][y]][np] = true;
                    vv[v[x][y]][np] = true;
                    rr[r[x][y]][np] = true;
    
    
                }    
            //rep(i, 1, 9){rep(j, 1, 9) printf("%d ", f[i][j]); putchar(10);}
            }
            dfs(1);
        }
                
        
        
        return 0;
        
    }
  • 相关阅读:
    LeetCode 1672. 最富有客户的资产总量
    LeetCode 455. 分发饼干
    Linux上安装docker并设置免sudo权限与国内镜像源
    Java后端期末复习
    Windows 10 家庭版开启本地安全策略 关闭管理员权限提升
    C语言中两种交换变量值方法的速度测试
    jQuery动态生成元素无法绑定事件的解决办法
    JQuery绑定事件处理动态添加的元素
    Socket通信服务端和客户端总结
    js传函数指针
  • 原文地址:https://www.cnblogs.com/cxhscst2/p/5958210.html
Copyright © 2020-2023  润新知