zoukankan      html  css  js  c++  java
  • HDU 1426 数独

    HDU 1426

    /*************************************************************************
    	> File Name: shudu.cpp
    	> Author:yuan 
    	> Mail: 
    	> Created Time: 2014年11月06日 星期四 14时35分05秒
     ************************************************************************/
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int MAX=9;
    int mat[MAX][MAX],ans[MAX][MAX];
    int flag[10];
    char c;
    bool mark;
    bool can1(int k,int num)
    { 
        int x=k/9;
        int y=k%9;
        for(int i=0;i<9;i++)
         if(ans[x][i]==num) return 0;
        return 1;
    }
    bool can2(int k,int num)
    {
        int x=k/9;
        int y=k%9;
        for(int i=0;i<9;i++)
         if(ans[i][y]==num) return 0;
        return 1;
    }
    bool can3(int k,int num)
    {
        int x=k/9;
        int y=k%9;
        int sx=x/3*3,sy=y/3*3;
        for(int i=sx;i<sx+3;i++)
         for(int j=sy;j<sy+3;j++)
         if(ans[i][j]==num) return 0;
        return 1;
    }
    void print()
    {
           for(int i=0;i<9;i++)
              for(int j=0;j<9;j++)
            {
               if(j==0) printf("%d",ans[i][j]);
                else printf(" %d",ans[i][j]);
                if(j==8) printf("
    ");
            }
    }
    
    void dfs(int k)
    {   
        if(mark==1) return;
        if(k==81){
            mark=1;
            print();
            return;
        }
        int x=k/9;
        int y=k%9;
        if(mat[x][y]!=0) dfs(k+1);
        else for(int i=1;i<=9;i++)
        {
            if(can1(k,i)&&can2(k,i)&&can3(k,i))
            {   
                ans[x][y]=i;
                dfs(k+1);
                ans[x][y]=0;
            }
        }
    }
    int main()
    {  
        bool first=1;
        while(cin>>c)
        {   
    
            if(c!='?') mat[0][0]=ans[0][0]=c-'0';
            else mat[0][0]=ans[0][0]=0;
            for(int i=0;i<9;i++)
              for(int j=0;j<9;j++)
            {   
                if(i==0&&j==0) continue;
                cin>>c;
                if(c!='?') mat[i][j]=ans[i][j]=c-'0';
                else mat[i][j]=ans[i][j]=0;
    
            }
            if(first){first=0;}
            else printf("
    ");
            mark=0;
            memset(flag,0,sizeof(flag));
           dfs(0);
        }
        return 0;
    }
    


  • 相关阅读:
    2022年第一天
    RestTemplate、 Ribbon、 OpenFeign 关系以及OpenFeign使用连接池
    linux下面编写简单的c++程序
    Rocket简介以及单机版安装
    事务源码(二)
    javaagent技术&Attach技术
    gateway网关原理
    Maven自定义插件以及使用
    AotucCrawler 快速爬取图片
    Monkey工具之fastbotiOS实践
  • 原文地址:https://www.cnblogs.com/codeyuan/p/4254406.html
Copyright © 2011-2022 走看看