• POJ 2676 Suduku


    POJ 2676 Suduku

    先直接贴代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 15;
    
    int p[N][N];
    bool row[N][N];
    bool col[N][N];//column
    bool nine[N][N];
    int temp;
    int temp1;
    // int k1 ;//When initial the variable k1 here, wa.Wht is that???
    
    void init()
    {
        memset(row, false, sizeof(row));
        memset(col, false, sizeof(col));
        memset(nine, false, sizeof(nine));
    }
    
    void input()
    {
        for(int i = 0 ; i < 9 ; i++)
            for(int j = 0 ; j < 9 ; j++)
            {
                scanf("%1d",&p[i][j]);
                if(p[i][j])
                {
                    temp = p[i][j];
                    row[i][temp] = true;
                    col[j][temp] = true;
                    temp1 = (i / 3)*3 + j / 3 ;
                    nine[temp1][temp] = true;
                }
                
            }
    }
    
    bool dfs(int x,int y)  
    {  
        if(x==9)    return true;
        bool flag=false;  
        if(p[x][y])  
        {  
            if(y==8) flag=dfs(x+1,0);  
            else flag=dfs(x,y+1);  
            return flag;  
        }  
        int k1 = (x / 3)*3 + y / 3 ;
        for(int i=1;i<=9;i++)       if(!row[x][i] && !col[y][i] && !nine[k1][i])  
        {  
            p[x][y] = i;
            row[x][i] = true; 
            col[y][i] = true; 
            nine[k1][i] = true; 
              
            if(y==8) flag=dfs(x+1,0); 
            else flag=dfs(x,y+1); 
            if(flag) return true; 
    
            p[x][y] = 0;
            row[x][i] = false; 
            col[y][i] = false;
            nine[k1][i] = false;
    
        }  
        return false;  
    }
    
    int main()
    {
        int T;
        cin >> T;
        while(T--)
        {
            init();
    
            input();
    
            dfs(0,0);
    
            for(int i = 0 ; i < 9 ; i++)
                for(int j = 0 ; j < 9 ; j++)
                {
                    cout << p[i][j];
                    if( j == 8 ) cout << endl;    
                }
            }
        return 0;
    }
    
    透过泪水看到希望
  • 相关阅读:
    javaScript 事件循环机制
    javaScript 原型与原型链
    清除浮动
    水平垂直居中的实现
    GitLab + Jenkins + Harbor 工具链快速落地指南
    a标签下载存储在项目中的文件
    判断数组对象中某一属性是否包含重复的值
    网站title前的小图标
    给二维数组动态赋值
    格式化eltable中的时间
  • 原文地址:https://www.cnblogs.com/ronnielee/p/9495151.html
Copyright © 2020-2023  润新知