zoukankan      html  css  js  c++  java
  • poj 2676 Sudoku

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int mp[10][10],row[10][10],col[10][10],grid[10][10];
    
    int get(int x,int y)
    {
        if(x>=1&&x<=3)
        {
            if(y>=1&&y<=3) return 1;
            else if(y>=4&&y<=6) return 4;
            else return 7;
        }
        else if(4<=x&&x<=6)
        {
            if(y>=1&&y<=3) return 2;
            else if(y>=4&&y<=6) return 5;
            else return 8;
        }
        else
        {
            if(y>=1&&y<=3) return 3;
            else if(y>=4&&y<=6) return 6;
            else return 9;
        }
    }
    
    int dfs(int x,int y)
    {
        if(x==10) return 1;
        int flag=0,i;
        if(mp[x][y])
        {
            if(y==9)
                flag=dfs(x+1,1);
            else
                flag=dfs(x,y+1);
    
            if(flag) return 1;
            else return 0;
        }
        else
        {
            for(i=1; i<=9; i++)
            {
                int k=get(x,y);
                if(!row[x][i]&&!col[y][i]&&!grid[k][i])
                {
                    row[x][i]=1;
                    col[y][i]=1;
                    grid[k][i]=1;
                    mp[x][y]=i;
                    if(y==9)
                        flag=dfs(x+1,1);
                    else
                        flag=dfs(x,y+1);
    
                    if(flag==0)
                    {
                        row[x][i]=0;
                        col[y][i]=0;
                        grid[k][i]=0;
                        mp[x][y]=0;
                    }
                    else
                        return 1;
                }
            }
        }
        return 0;
    }
    
    int main()
    {
        int i,j,k,_;
        char s;
        scanf("%d",&_);
        while(_--)
        {
            memset(row,0,sizeof(row));
            memset(col,0,sizeof(col));
            memset(grid,0,sizeof(grid));
    
            for(i=1; i<=9; i++)
                for(j=1; j<=9; j++)
                {
                    cin>>s;
                    mp[i][j]=s-'0';
                    if(mp[i][j])
                    {
                        k=get(i,j);
                        row[i][mp[i][j]]=1;
                        col[j][mp[i][j]]=1;
                        grid[k][mp[i][j]]=1;
                    }
                }
            dfs(1,1);
    
            for(i=1; i<=9; i++)
            {
                for(j=1; j<=9; j++)
                {
                    printf("%d",mp[i][j]);
                }
                printf("
    ");
            }
        }
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    mustcache 模板语法
    java 打印pdf文件
    java从远程服务器获取PDF文件并后台打印(使用pdfFox)
    如何写md格式的文档
    mysql游标的用法及作用
    Spring
    JQuery.extend扩展实现同步post请求
    tp5框架的获取器
    ThinkPHP开启设置子域名笔记
    每天进步一点点
  • 原文地址:https://www.cnblogs.com/xryz/p/4847928.html
Copyright © 2011-2022 走看看