• POJ 2676


    题目是数独,想到了深度优先搜索一个个地验证;

    做出来后,妈妈再也不用担心我玩数独被人虐了


    #include <iostream>
    using namespace std;
    int  num[10][10];
    int x,y;
    bool judge(int l,int r,int a){              //用于判断同一行,同一列,同一个小九宫格内,是否已经存在相同的
        for(int i=0;i<9;i++){                 // 同一行,同一列的判断
           if(num[i][r]==a)return false;
           if(num[l][i]==a)return false;
        }
        int b=(l/3)*3,c=(r/3)*3;                  //同一个小九宫格的判断,(b,c)就是小九宫格的第一格坐标
        for(int i=b;i<b+3;i++){                
            for(int j=c;j<c+3;j++){
                if(num[i][j]==a)return false;
            }
        }
        return true;
    }
    bool dfs(int x,int y){
        int i,m,nx=10,ny=10;
        bool ok=false;
        for(m=y;m>=0;m--){
            for(int d=8;d>=0;d--){
                if(0==num[m][d]&&!(x==d&&y==m)){
                    nx=d;
                    ny=m;
                    ok=true;
                    break;
                }
            }
            if(ok)break;
        }
        for(i=1;i<10;i++){
            if(!judge(y,x,i))continue;
            num[y][x]=i;
            if(10==nx)return true;
            if(!dfs(nx,ny)){continue;}                  //递归
            return true;
        }

        num[y][x]=0;                          //这一层失败,则重来
        return false;
    }
    int main()
    {   int n;
        cin>>n;
        char ch;
        while(n--){
            for(int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    cin>>ch;                        //以字符形式输入,然后转化为数字
                    num[i][j]=ch-48;
                    if(0==num[i][j]){
                        x=j;
                        y=i;
                    }
                }
            }
            dfs(x,y);                            //调用函数
                for(int i=0;i<9;i++){
                    for(int j=0;j<9;j++){
                        cout<<num[i][j];
                    }
                    cout<<endl;
                }
            }
        return 0;
    }

  • 相关阅读:
    将博客搬至CSDN
    ELK环境搭建(ElasticSearch、Logstash 、Kibana)
    Linux 安装Jdk(保姆级教程)
    从头到尾再说一次 Java 垃圾回收
    Exchange 2013学习笔记二十一:传输规则
    Exchange 2013学习笔记二十:电子邮件地址策略
    Exchange 2013学习笔记十九:证书管理
    Exchange 2013学习笔记十八:ECP设置
    Exchange 2013学习笔记十七:OWA设置
    Exchange 2013学习笔记十六:公用文件夹
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3848896.html
Copyright © 2020-2023  润新知